我正在尝试阅读来自Kafka的消息,所以我写了一些简单的消费者来阅读Kafka的消息。
While True:
message = consumer.poll(timeout=1.0)
# i am doing something with messages
在上面的消息类型的代码输出是消息对象。我如何得到一组消息?
有可能吗?
注意:基本的消费者配置不多。
答案 0 :(得分:5)
librdkafka(底层C库)只将消息逐个返回给应用程序,但在内部,消息是从代理中批量提取的,因此没有性能下降。消息在内部缓冲区中排队,等待您的应用轮询。
有调整行为的配置:
fetch.wait.max.ms
(默认为100),给予经纪人累积要发送的数据的时间
fetch.message.max.bytes
(默认值1048576,1GB),批次的最大大小
queued.max.messages.kbytes
(默认为1000000),内部队列中的最大数据大小。如果您不定期轮询,则不会从队列中清除数据,您将无法再获取任何数据。
您可以在此处找到许多其他人:https://github.com/edenhill/librdkafka/blob/0.11.0.x/CONFIGURATION.md
如果你真的想要一个数据数组,因为你处理数据的方式,你可以做的是像你一样在循环中调用低超时轮询,并在有x消息时或y ms后停止循环,将它们累积在一个集合中。处理生成的数组并重复循环。
生成相同:您逐个生成数据,但邮件在发送给经纪人之前会被批处理。