繁体   English   中英

kafka-node的消息顺序错误

[英]Wrong message order with kafka-node

我正在使用kafka-node node.js库。 使用新的开始(zookeeper中没有偏移量)消耗250k条消息(将其以2000条消息的批次加载到Kafka中)的主题时,消息顺序出现问题。 使用者通常不处理偏移量为0的消息,而是从4000或8000开始。 此外,它还连续处理1000条消息的块,并在以后或早于N * 1000偏移处跳转。 我尝试将maxTickMessages更改为800,并处理od 800消息块,但仍跳至N * 1000偏移量。 我在调试日志中找不到丢失的200个偏移量。 将maxTickMessages或maxNumSegments更改为非常大的值没有帮助。

我正在直接在Kafka二进制协议解码器中打印当前消息偏移量,这应该消除一些潜在的异步影响。 请参阅偏移日志和使用的代码kafka-order-test.js 我认为Kafka二进制协议解析中存在问题,但无法在其中找到问题。

Kafka本身不应该成为问题,因为我使用kafkacat转储了主题,该主题具有正确的偏移量和消息顺序。 我还使用Wireshark监视了node.js-Kafka网络流量,并以正确的顺序显示了消息。

此问题是由异步嵌套的MessageSet解压缩引起的,该解压缩导致乱序使用消息。 Kafka在MessageSet中返回消息,其中包含2000条消息的嵌套压缩MessageSet(在我的测试中)。 不幸的是,解压缩是异步的,没有任何同步,因此消息以不超过2000个的批处理顺序乱序处理(取决于maxTickMessages)。 我的修正适用于同步减压。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM