首先,请注意,不能选择使用Java Consumer API。为什么它不是我无法透露的选项,但我必须能够使用shell命令执行以下操作。
我有一个主题,我已经写了一条消息,并且可以通过使用./kafka-console-consumer.sh
选项运行--from-beginning
来确认是否是这种情况,但是由于这会启动使用者,因此该命令将卡住,需要使用SIGINT进行手动干预。我已经接近使用--timeout-ms
了,但是这并不理想,因为除非我选择一个很高的值,否则数据转储可能会变得不可靠。
我想以一种可以被grepped的方式转储console-consumer的输出, 或 。
答案 0 :(得分:2)
当您写给Kafka时,您可以设置in the producer acks
,这是您希望从代理那里保证本地代理和/或所有副本已接收并写入消息的级别。 。
如果使用此选项,则无需尝试使用该主题来确定记录是否已写入。听起来很难尝试去做。
如果您绝对必须使用命令行工具来执行此操作(这不是一个好主意),请使用kafkacat
,它可以从任何偏移量消耗任意数量的消息,例如:
从开头(-C
)开始消耗(-c 5
)五个消息(-o beginning
),或者在到达分区末尾时退出(-e
)< / p>
kafkacat -b localhost:9092 -t mytopic -o beginning -e -C -c 5
从结尾(-C
)开始消耗(-c 10
)十个消息(-o -10
),或者在到达分区末尾时退出(-e
)< / p>
kafkacat -b localhost:9092 -t mytopic -o -10 -e -C -c 10
在偏移量42(-C
)上消耗(-c 1
)一个消息(-o 42
),或者在到达分区末尾时退出(-e
)< / p>
kafkacat -b localhost:9092 -t mytopic -o 42 -e -C -c 1