我们的应用程序在我们的流代码中间歇性地遇到OutOfOrderSequenceException。导致流线程停止。
实现很简单,有2个KStream加入并输出到另一个主题。
在寻找此OutOfOrderSequenceException的解决方案时 我发现以下有关Confluent的文档
https://docs.confluent.io/current/streams/concepts.html#out-of-order-handling
但是找不到此处引用的设置,配置或折衷方案? 如何手动进行簿记?
如果用户要处理此类乱序数据,通常需要 允许他们的应用程序在记账时等待更长的时间 他们在等待时间内的状态,即做出权衡决策 在延迟,成本和正确性之间。 在Kafka Streams中,用户可以 为窗口聚合配置其窗口运算符以实现 此类权衡(详情请参见开发人员指南) 。
答案 0 :(得分:0)
摘自OutOfOrderSequenceException
的JavaDocs:
此异常表明代理从生产者接收到意外的序列号,这意味着数据可能已丢失。如果生产者仅配置为幂等(即,如果设置
enable.idempotence
且未配置transactional.id
),则可以继续使用相同的生产者实例进行发送,但是这样做可能会重新排序已发送记录。对于事务性生产者,这是一个致命错误,您应该关闭生产者。
序列号是内部写入每个主题的消息的编号。
由于这是一个内部错误,因此很难说出根本原因是什么。
答案 1 :(得分:0)
更新: 更新Kafka Brokers和KStream版本后,问题似乎已经消退。
我已经为所有人更新了码头。复制因子已经是3。