Kafka控制台消费者:如何从一个主题获取最后N个消息而不是从一开始的所有消息?

时间:2016-08-16 19:56:41

标签: apache-kafka

我可以这样做:

./bin/kafka-avro-console-consumer --zookeeper 10.0.0.225:2181/kafka
--topic myTopic --property schema.registry.url=http://10.0.0.100:8081 
--from-beginning

但是我的消息太多了。我宁愿只得到最后的N个。我怎么能用kafka console consumer做到这一点?

6 个答案:

答案 0 :(得分:7)

如果您想坚持使用捆绑的二进制文件,则需要使用简单的使用者shell:

bin/kafka-simple-consumer-shell.sh --broker-list mybroker:9092 --topic
mytopic --partition mypartition --offset myoffset

我建议kt;它更快,更轻,并有更好的选择。

答案 1 :(得分:1)

我刚开始使用Kafka,所以可能有更好的方法来执行此操作,但它会打印[ sum(CDF(:).cdfSR(1))/895, sum(CDF(:).cdfSR(2))/895, ..., sum(CDF(:).cdfSR(48))/895 ] 返回的第一个分区中的最后10条消息,然后继续输出新消息进来。

kafka-run-class kafka.tools.GetOffsetShell

将上面的offsets=$(kafka-run-class kafka.tools.GetOffsetShell \ --broker-list $BROKER_1:9092,$BROKER_2:9092 --topic my_topic) kafka-avro-console-consumer --bootstrap-server $BROKER_1:9092 \ --topic my_topic \ --partition $(echo $offsets | awk -F':' '{print $2}') \ --offset $(($(echo $offsets | awk -F':| ' '{print $3}') - 10)) \ --property schema.registry.url=http://$WORKER_1:8081 替换为要打印的所需数量的消息。

答案 2 :(得分:0)

首先获取所有分区中的偏移值:

kafka-run-class.bat kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic topicName

topicName:0:15 topicName:1:16 topicName:2:10

现在从特定主题和分区获取N条消息。 我将偏移号设为10,因为我只想从分区0读取5条消息。

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic topicName--offset 10 --partition 0

它将从分区0打印最后5条消息。

请记住,Kafka不保证分区之间的消息顺序。它确实提供了分区内的排序。

答案 3 :(得分:0)

您还可以使用kafkacat工具,例如here

这是一个非常强大且快速的工具,可以从控制台从Kafka中读取数据,并且是开源的:https://github.com/edenhill/kafkacat

GitHub上提供了许多示例,下面显示了一个示例来读取主题“ mytopic”的分区0中的最后n条消息:

kafkacat -C -b mybroker -t mytopic -p 0 -o -2000

答案 4 :(得分:-1)

./ bin / kafka-console-consumer.sh --bootstrap-server kafka-broker.service-pe-test.consul.c-test.ost.cloud.internal:9093 --max-messages 1-组basan_PERF_console --consumer.config config-stage.properties --partition 1 --offset 14677669 --topic order-demandh

这是一次从特定的偏移量中检索一条消息的方法

答案 5 :(得分:-1)

我可以确认max-messages参数可以传递给kafka-console-consumerkafka-avro-console-consumer cli工具。

由于我不得不单独查看很多此类内容,因此以下示例使用kafka-avro-console-consumer来使用已启用SSL的主题(配置了架构注册表)使用前10条Avro记录,并打印字符串键和记录。

./kafka-avro-console-consumer \
--bootstrap-server something.com:9093,something2.com:9093 \
--consumer.config /path/to/client-ssl.properties \
--property schema.registry.url=http://some-schema-registry.com \
--property print.key=true \
--key-deserializer=org.apache.kafka.common.serialization.StringDeserializer \
--from-beginning \
--max-messages 10 \
--topic some-topic-name