如何在融合的kafka python中阅读批处理消息?

时间:2017-08-28 13:48:03

标签: python apache-kafka confluent-kafka

我正在尝试阅读来自Kafka的消息,所以我写了一些简单的消费者来阅读Kafka的消息。

While True:
        message = consumer.poll(timeout=1.0)
        # i am doing something with messages

在上面的消息类型的代码输出是消息对象。我如何得到一组消息?

有可能吗?

注意:基本的消费者配置不多。

1 个答案:

答案 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后停止循环,将它们累积在一个集合中。处理生成的数组并重复循环。

生成相同:您逐个生成数据,但邮件在发送给经纪人之前会被批处理。