我正在使用kafka-node(kafka的节点客户端),使用使用者来检索有关主题的消息。不幸的是,我收到了一个" offsetOutOfRange" condition(调用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)我是否需要编写代码/逻辑来处理这种情况,并明确地重新定位消费者偏移量以进行读取? (这看起来有点麻烦)...
感谢任何帮助。