我刚刚开始使用kafka,并开始在本地计算机上使用kafka。我可以使用Confluent提供的flask_jwt_extended来生成和使用消息。
到目前为止,我的理解是什么
poll()
首先,我在这里想念吗?
此外,我经常在两个客户端碰到一个短语“ commiting messages / offsets”。将消息/偏移提交给kafka到底意味着什么?
答案 0 :(得分:1)
生产者将把每个产生的消息存储在本地缓冲区队列中。生产者需要明确地将消息从其推送到kafka集群。
您可以配置该批次的大小,确认等,但是在调用minkowski,p=1.6
后无需“明确推送”
在消费者端,它将以某种方式从kafka群集中获取消息并将其存储在本地缓冲区队列中,然后通过api调用(例如
)从缓冲区中提取这些消息。producer.produce(...)
你是对的。
首先,我在这里想念吗?
不,这些概念对于理解调优/性能很重要,您应该在配置生产者和消费者时格外小心,但它们不应影响您对生产者/消费者进行编码的方式(例如,不要做任何技巧)为您的poll()
计时)。
在生产方,如果您想退出发布消息(这是为了支持两个阶段的提交),则有一个事务概念,但是我不确定这在Python API中如何工作。除此之外,您还应考虑致电cosumer.poll()
时发送的消息。您不必在每个producer.produce()
之后致电producer.flush()
在使用方,有提交和偏移量的概念。在较高的层次上,您可以这样考虑:producer.produce()
是从API询问消息,但是为了便于理解,您是从主题询问消息。现在,当您处理该主题中的消息时,您可能需要某种方式让Kafka知道您已经阅读并处理了一些消息,并且不想再次看到它们。
每条消息在主题中都有一个偏移量(实际上在分区中,但是我们可以保持简单并说出主题)。您可以将此偏移量视为消息在主题中的位置(第一条消息poll()
,第二条消息0
,依此类推,添加的每条消息的偏移量都比最后一条消息高)。当您明确呼叫1
时,实际上是在提交commit
并告诉Kafka您已经阅读了所有消息,并且不想再看到它们。