簡體   English   中英

使用DataFlow從多個PubSub主題流到BigQuery時,郵件卡在GBP中嗎?

[英]Messages stuck in GBP when streaming from multiple PubSub topics to BigQuery using DataFlow?

我有一個包含以下部分的Java DataFlow管道:

  • PubSub訂戶閱讀的幾個主題
  • Flatten.pCollections操作
  • 從PubsubMessage轉換為TableRow
  • BigQuery writer將所有內容寫入動態表

如果要連接的訂閱列表中有多個PubSub-topic,則所有元素都將卡在BigQuery編寫器的Reshuffle操作中的GroupByKey操作中。 發送幾十條測試消息后,我已經讓它運行了幾個小時,但是BigQuery沒有寫任何東西。

我發現了以下三個變通方法(每個變通方法都與其他變通方法分開)

  • 在Pubsub訂閱上添加一個“ withTimestampAttribute”調用。 屬性的名稱完全無關緊要-它可以是傳入消息上的任何現有或不存在的屬性
  • 將PubSub訂閱數減少到僅1
  • 刪除兩者之間的Flatten.pCollections操作,創建執行相同操作的多個單獨管道

消息不是故意加時間戳的-僅使用PubsubMessage時間戳將它們寫入BigQuery是完全可以接受的。

這也使我感到困惑,即使添加不存在的時間戳屬性也似乎可以解決該問題。 我調試了該問題以打印出管道中的時間戳,並且在兩種情況下它們都是可比較的; 指定不存在的時間戳記屬性時,無論如何似乎都回落到pubsub時間戳記。

是什么導致此問題? 我該如何解決? 對我來說,最可接受的解決方法是刪除Flatten.pCollections操作,因為它不會嚴格使代碼復雜化,但是我無法理解失敗的原因。

您是否將加窗應用於管道? Beam文檔警告您使用無邊界的PCollection(例如Pub / Sub),而不會出現任何窗口或觸發事件:

如果您沒有為無邊界的PCollection設置非全局窗口函數或非默認觸發器,然后使用分組轉換(例如GroupByKey或Combine),則管道將在構造時生成錯誤,並且您的工作將失敗。

在您的情況下,管道不會在構造上失敗,但是消息會停留在GroupByKey中,因為它正在等待窗口結束。 嘗試在BigQuery編寫器之前添加一個窗口,看看是否可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM