消费者在Kafka中消费消息的方式是什么?

时间:2016-03-07 15:46:01

标签: apache-kafka

如果在网络的某个地方有“Kafka”服务器,我会认为消费者可能有两种消费方式:

  1. 首先“订阅”主题并实际告诉Kafka服务器它正在监听的位置,以便在生成新消息时,Kafka主动通过网络将消息发送给消费者。 / p>

  2. 消费者必须使用当前消息的偏移量来轮询Kafka服务器,询问是否有新消息。

  3. 这是Kafka的工作原理,是否可以配置哪个选项?

1 个答案:

答案 0 :(得分:2)

我将评论扩展为答案。

通过consumer documentation阅读,Kafka仅支持您已对其进行描述的选项2。消费者有责任从Kafka服务器获取消息。在0.9.x.x消费者中,这是由poll() method完成的。消费者轮询Kafka服务器并返回消息(如果有)。我认为他们选择避免​​支持选项1有几个原因。

  1. 它限制了Kafka服务器所需的复杂性。将消息推送给消费者并不是服务器的责任,它只是保留消息并等待消费者提取消息。
  2. 如果Kafka服务器正在向消费者推送所有消息,那么它可能会压倒消费者。假设生产者正在将消息传递到Kafka服务器10 msg / sec,但某个消费者只能处理2 msg / sec。如果Kafka服务器试图将收到的每条消息都推送到该消费者,消费者很快就会被收到的消息数量所淹没。
  3. 可能还有其他原因,但目前这些是我想到的两个原因。