kafka-node的错误消息顺序
Wrong message order with kafka-node
我正在使用 kafka-node node.js 库。在使用带有 250k 消息的主题(其中以 2000 条消息的批次加载到 Kafka 中)并重新开始(zookeeper 中没有偏移量)时,我的消息顺序有问题。消费者通常不处理偏移量为 0 的消息,而是从 4000 或 8000 左右开始。它还连续处理 1000 条消息的块,并在较晚或较早的 N*1000 偏移处跳转。我已经尝试将 maxTickMessages 更改为 800,它处理块 od 800 条消息,但它仍然跳到 N*1000 偏移量。我在调试日志中找不到丢失的 200 个偏移量。将 maxTickMessages 或 maxNumSegments 更改为非常大的数字没有帮助。
我在 Kafka 二进制协议解码器中直接打印当前消息偏移量,这应该可以消除一些潜在的异步影响。请参阅 Offset log and used code kafka-order-test.js。我认为 Kafka 二进制协议解析有问题,但我没能找到问题所在。
Kafka 本身应该不是问题,因为我用 kafkacat 转储了主题,它保持了正确的偏移量和消息顺序。我还使用 Wireshark 监控了 node.js-Kafka 网络流量,并且消息以正确的顺序显示。
该问题是异步嵌套MessageSet解压导致消息消费乱序造成的。 MessageSet 中的 Kafka returns 消息,其中包含 2000 条消息的嵌套压缩 MessageSet(在我的测试中)。不幸的是,解压是异步的,没有任何同步,因此消息被乱序处理,最多 2000 条消息(取决于 maxTickMessages)。我的fix应用同步解压
我正在使用 kafka-node node.js 库。在使用带有 250k 消息的主题(其中以 2000 条消息的批次加载到 Kafka 中)并重新开始(zookeeper 中没有偏移量)时,我的消息顺序有问题。消费者通常不处理偏移量为 0 的消息,而是从 4000 或 8000 左右开始。它还连续处理 1000 条消息的块,并在较晚或较早的 N*1000 偏移处跳转。我已经尝试将 maxTickMessages 更改为 800,它处理块 od 800 条消息,但它仍然跳到 N*1000 偏移量。我在调试日志中找不到丢失的 200 个偏移量。将 maxTickMessages 或 maxNumSegments 更改为非常大的数字没有帮助。
我在 Kafka 二进制协议解码器中直接打印当前消息偏移量,这应该可以消除一些潜在的异步影响。请参阅 Offset log and used code kafka-order-test.js。我认为 Kafka 二进制协议解析有问题,但我没能找到问题所在。
Kafka 本身应该不是问题,因为我用 kafkacat 转储了主题,它保持了正确的偏移量和消息顺序。我还使用 Wireshark 监控了 node.js-Kafka 网络流量,并且消息以正确的顺序显示。
该问题是异步嵌套MessageSet解压导致消息消费乱序造成的。 MessageSet 中的 Kafka returns 消息,其中包含 2000 条消息的嵌套压缩 MessageSet(在我的测试中)。不幸的是,解压是异步的,没有任何同步,因此消息被乱序处理,最多 2000 条消息(取决于 maxTickMessages)。我的fix应用同步解压