Kafka KStream OutOfOrderSequenceException

时间:2019-02-12 04:33:03

标签: apache-kafka apache-kafka-streams

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

实现很简单,有2个KStream加入并输出到另一个主题。

在寻找此OutOfOrderSequenceException的解决方案时 我发现以下有关Confluent的文档

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

但是找不到此处引用的设置,配置或折衷方案? 如何手动进行簿记?

  

如果用户要处理此类乱序数据,通常需要   允许他们的应用程序在记账时等待更长的时间   他们在等待时间内的状态,即做出权衡决策   在延迟,成本和正确性之间。 在Kafka Streams中,用户可以   为窗口聚合配置其窗口运算符以实现   此类权衡(详情请参见开发人员指南)

2 个答案:

答案 0 :(得分:0)

摘自OutOfOrderSequenceException的JavaDocs:

  

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

序列号是内部写入每个主题的消息的编号。

由于这是一个内部错误,因此很难说出根本原因是什么。

答案 1 :(得分:0)

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

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

我已经为所有人更新了码头。复制因子已经是3。