簡體   English   中英

FixedWindow 顯然沒有在流式傳輸 python 光束管道中觸發

[英]FixedWindow apparently not firing in streaming python beam pipeline

我正在嘗試在 python 中構建數據流管道。主輸入 stream 來自 Pub/Sub,主處理 function 采用從 Pub/Sub stream 相當不規則地更新的副輸入。 我編寫了以下代碼來測試我的設計:

def print_and_return(x):
    print('---DEBUG---: ' + str(x))
    return x

def comb(x, y):
    return f'Main input: {x}, side input: {y}'

def load_side_input(pubsub_message):
    import json
    message = pubsub_message.decode("utf8")
    side_input = json.loads(message)
    return ('side', side_input)


def run(input_subscription, side_input_sub, pipeline_args=None):
    pipeline_options = PipelineOptions(
        pipeline_args, streaming=True, save_main_session=True
    )

    with Pipeline(options=pipeline_options) as pipeline:
        side_input = (
            pipeline
            | "Side impulse" >> io.ReadFromPubSub(subscription=side_input_sub)
            | "Window side" >> WindowInto(window.GlobalWindows(), trigger=trigger.Repeatedly(trigger.AfterCount(1)),
                                          accumulation_mode=trigger.AccumulationMode.DISCARDING)
            | "Parse side input" >> Map(load_side_input)
        )
        (
            pipeline
            | "Read from Pub/Sub" >> io.ReadFromPubSub(subscription=input_subscription, with_attributes=True)
            | "Window" >> WindowInto(window.FixedWindows(10))
            | "Add sideinput" >> Map(comb, y=pvalue.AsDict(side_input))
            | "Print" >> Map(print_and_return)
        )

我在本地運行它以在調試模式下進行測試, load_side_input function 觸發器(我知道,因為如果我在其中放置一個斷點,它就會被擊中)但是 rest( combprint_and_return )不會。 我的理解是 FixedWindow 應該在主輸入上每 10 秒觸發一次,並且光束將匹配 window 與側輸入上觸發器的最后一次觸發,因為它在全局 window 中,但實際上沒有任何反應。

我錯過了什么,為什么沒有output?

編輯:

經過幾天的嘗試,甚至詢問 beam 用戶郵件組后,我認為這可能只是本地運行器在起作用,而且可以肯定的是,在部署到 Dataflow 之后,管道按預期工作。 雖然以這種方式進行測試很煩人,但知道問題是什么以及如何解決仍然是件好事。

它不會觸發,因為主輸入和側輸入的 window 不匹配(固定與全局),因此它無法獲取側輸入數據。

由於您沒有使用任何聚合,因此您可以將主要的 window 取出。 如果您計划聚合,請在加入側輸入后重新窗口。

你在這里有一個例子:

Apache Beam Cloud Dataflow Streaming Stuck Side Input

暫無
暫無

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

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