我知道必须有办法做到这一点,但我无法弄清楚这一点。一旦我读完队列中的所有消息,我就需要停止kafka消费者。
有人可以就此提供任何信息吗?
答案 0 :(得分:6)
您可以在启动使用者时使用参数传递参数:-consumer-timeout-ms,如果在此期间未读取任何消息,则会引发异常。例如,如果在最后2秒内没有收到新消息,则停止使用者: kafka.consumer.ConsoleConsumer -consumer-timeout-ms 2000
您可以看到此内容和所有其他input options here
答案 1 :(得分:3)
您可以使用SimpleConsumerShell和no-wait-at-logend选项。见SystemTools-SimpleConsumerShell
例如:
./kafka-run-class.bat kafka.tools.SimpleConsumerShell --broker-list localhost:9092 --topic kafkademo --partition 0 --no-wait-at-logend
答案 2 :(得分:3)
当前,Kafka版本2.11-2.1.1具有名为const con = require('./connectionDB')
const data = con.getConnection(3)
console.log(data)
的脚本。
它有一个新标记:kafka-console-consumer.sh
。
基本上,此标志是没有新日志要等待时退出之前等待的最长时间。以毫秒为单位。
阅读所有消息后,可以使用此属性结束控制台使用者。
答案 3 :(得分:0)
如果您没有使用Scala客户端,请尝试使用-e
选项kafkacat,告诉它在分区结束时退出。
E.g。使用来自mytopic分区2的所有消息,然后退出:
$ kafkacat -b mybroker -t mytopic -p 2 -o beginning -e
或消耗最后3000条消息然后退出:
$ kafkacat -b mybroker -t mytopic -p 2 -o -3000 -e