【问题标题】:At what stage does Dataflow/Apache Beam ack a pub/sub message?Dataflow/Apache Beam 在什么阶段确认发布/订阅消息?
【发布时间】:2018-03-25 02:17:01
【问题描述】:

我有一个将 Pub/Sub 订阅作为无限源的数据流流作业。我想知道数据流在什么阶段确认传入的发布/订阅消息。在我看来,如果在数据流管道的任何阶段引发异常,消息就会丢失。

我还想知道如何使用 pub/sub 无限源编写数据流管道的最佳实践,以便在失败时检索消息。谢谢!

【问题讨论】:

    标签: google-cloud-platform google-cloud-pubsub apache-beam dataflow


    【解决方案1】:

    在捆绑成功并且捆绑的结果(输出和状态突变等)已被持久提交后,Dataflow Streaming Runner 会确认捆绑接收的 pubsub 消息。失败的捆绑包会重试直到成功,并且不会导致数据丢失。如果您认为可能会发生数据丢失,请提供详细信息(作业 ID 和您得出结论认为数据已因故障而丢失的原因),我们将进行调查。

    【讨论】:

    • 这是工作 ID,2017-10-12_19_26_32-4234684930060241078。您可以在控制台中看到有一个阶段失败,因此在其“输出集合”部分中没有显示任何内容。我无法通过新的数据流作业(取消此作业后)再次接收丢失的数据。我也无法使用 pub/sub 客户端库接收数据。
    • 嗯,是的,如果您取消管道,那么管道中的所有中间数据都会丢失。当数据流将数据摄取到管道中时,它会持久地存储它,并在出现瞬时错误时防止数据丢失,但管道取消是另一回事。我想您希望消息在被整个管道“完全处理”后得到确认,但是这个概念几乎不可能以一般方式定义。基本上,如果发生故障,如果你想保留数据,要么使用 Update 功能用非失败代码更新管道,要么使用 Drain 优雅地取消。
    • 我正在制作类似“read_from_pubsub->process_message->send_outside”的管道。在“send_outside”中,如果我从端点收到 50x 错误之类的异常,我会记录错误以记录并再次引发异常以供 Dataflow 捕获。我遇到一个问题,即引发异常后所有步骤都停止工作。如何正确返回 send_outside 函数?(除了引发异常?)
    • @sees 你找到解决方案了吗?我有一个类似的案例。我想知道在这种情况下消息是如何被确认的,因为它不是如上所述的“持久提交”。
    猜你喜欢
    • 2021-04-24
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2017-10-15
    • 2011-11-22
    • 2018-07-17
    • 2018-01-01
    相关资源
    最近更新 更多