读取完所有消息后终止Kafka Console Consumer

时间:2014-12-18 10:45:36

标签: apache-kafka kafka-consumer-api

我知道必须有办法做到这一点,但我无法弄清楚这一点。一旦我读完队列中的所有消息,我就需要停止kafka消费者。

有人可以就此提供任何信息吗?

4 个答案:

答案 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