【问题标题】:Kafka KStream OutOfOrderSequenceExceptionKafka KStream OutOfOrderSequenceException
【发布时间】:2019-02-12 04:33:03
【问题描述】:

我们的应用程序在流代码中间歇性地遇到 OutOfOrderSequenceException。这会导致流线程停止。

实现很简单,2个KStreams join并输出到另一个topic。

在搜索此 OutOfOrderSequenceException 的解决方案时 我在 Confluent 上找到了以下文档

https://docs.confluent.io/current/streams/concepts.html#out-of-order-handling

但是找不到这里提到的设置、配置或权衡? 如何手动记账?

如果用户想要处理这样的乱序数据,通常他们需要 让他们的应用程序在记账时等待更长的时间 他们在等待期间的状态,即做出权衡决定 在延迟、成本和正确性之间。 在 Kafka Streams 中,用户可以 为窗口聚合配置它们的窗口运算符以实现 此类权衡(详情可在开发者指南中找到)。

【问题讨论】:

  • 我相信那部分是指窗口化。 docs.confluent.io/current/streams/developer-guide/… 可以通过在您可能认为事件“迟到”的持续时间内保持一个打开的窗口来处理乱序事件。
  • OutOfOrderSequenceException(即使它具有相似的名称)与文档中讨论的“无序数据”无关。这是一个内部错误。

标签: apache-kafka apache-kafka-streams


【解决方案1】:

来自OutOfOrderSequenceException的JavaDocs:

这个异常表示broker从生产者那里收到了一个意外的序列号,这意味着数据可能已经丢失了。如果生产者仅配置为幂等性(即,如果设置了enable.idempotence,但未配置transactional.id),则可以使用相同的生产者实例继续发送,但这样做有重新排序已发送记录的风险。对于事务性生产者,这是一个致命错误,您应该关闭生产者。

序列号是内部为写入主题的每条消息分配的编号。

因为这是一个内部错误,所以很难说根本原因可能是什么。

【讨论】:

    【解决方案2】:

    更新: 更新 Kafka Brokers 和 KStream 版本后,问题似乎已经消退。

    另外,根据建议, https://kafka.apache.org/10/documentation/streams/developer-guide/config-streams.html#recommended-configuration-parameters-for-resiliency

    我已经更新了对所有人的确认。复制因子已经是 3。

    【讨论】:

      猜你喜欢
      • 2018-09-18
      • 2020-04-21
      • 2020-05-02
      • 1970-01-01
      • 2017-06-02
      • 2022-10-24
      • 2019-09-28
      • 2019-02-05
      • 2018-08-30
      相关资源
      最近更新 更多