【发布时间】:2015-11-18 10:11:16
【问题描述】:
我正在使用 kafka-node(kafka 的节点客户端),使用消费者来检索有关主题的消息。不幸的是,我收到了“offsetOutOfRange”条件(调用了 offsetOutOfRange 回调)。我的应用程序运行良好,直到消费者明显落后于生产者,在最早的偏移量和最新的偏移量之间留下了相当大的差距。在这一点上,我(可能是错误的)假设消费者将能够继续接收消息(并希望赶上生产者)。
我的kafka消费者客户端代码如下:
:
:
var kafka = require('kafka-node');
var zookeeper = "10.0.1.201:2181";
var id = "embClient";
var Consumer = kafka.Consumer;
var client = new kafka.Client(zookeeper, id);
var consumer = new Consumer( client, [ { topic: "test", partition: 0 } ], { autoCommit: false } );
consumer.on('error', [error callback...]);
consumer.on('offsetOutOfRange', [offset error callback...]);
consumer.on('message', [message callback...]);
:
:
我做错了什么,还是错过了什么?
如果没有,我有几个问题:
(a) 是否有一种公认的“最佳”方式来编写客户端以优雅地处理这种情况?
(b) 为什么会提出这个条件? (我假设客户端应该能够继续阅读它停止的消息,最终(理想情况下)赶上......)
(c) 我是否需要编写代码/逻辑来处理这种情况,并明确地重新定位消费者偏移以读取? (这似乎有点麻烦)...
感谢任何帮助。
【问题讨论】:
标签: node.js apache-kafka kafka-consumer-api