更快地使用 Kafka 主题中的所有消息

Faster way to consume all messages in Kafka-topic

我们的团队正在将 Kafka 与 Flask 应用程序集成以实时显示数据,但我们也想显示来自 Kafka 的历史数据。

因此,我们的想法是,我们使用来自特定主题的所有消息并将数据显示给我们的用户。但是,当我们设置 Avro Consumer 来轮询整个主题的消息时,我们每分钟只能使用 100k-200k 条消息,这太慢了,因为每个主题大约有 250 万条消息。即使我们使用相同的 group-id 设置多个消费者,我们仍然没有太大的性能提升。

关于如何更快地从 kafka 主题获取所有消息的任何提示?或者将数据保存到数据库然后从那里查询数据会更好吗?

我们的消费者:

c = Consumer({
    'bootstrap.servers': 'brokers:9092',
    'group.id': 'consume_all_topics',
    'auto.offset.reset': 'earliest'
})

c.subscribe(['mytopic'])

now = datetime.now()
msg = c.poll(5.0)
while msg.value()['timestamp'] < now:
    msg = c.poll(5.0)

"Even when we set upp multiple consumers with the same group-id, we still don't have much of a performance improvement.

Any tips on how to get all messages from a kafka topic in a faster way?"

Kafka 消耗量随主题中分区的数量而变化。请记住,一个分区只能由一个消费者组中的一个消费者使用。如果分区数量与消费者组中的消费者数量匹配,您将获得最佳消费者性能。

此外,如果您对数据使用压缩(例如 zstd,在版本 2.2.x 中可用),您的消耗可能会增加。请注意,压缩最好在生产者端处理。