【问题标题】:What ways can a Consumer consume message in Kafka?消费者可以通过哪些方式在 Kafka 中消费消息?
【发布时间】:2016-06-21 06:03:09
【问题描述】:

如果网络中某处“那边”有 Kafka 服务器,我会假设消费者可以通过两种方式消费消息:

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

  2. Consumer 必须轮询 Kafka 服务器以请求任何新消息,使用它当前获取的消息的偏移量。

这就是 Kafka 的工作方式吗?是否可以针对使用哪个选项进行配置?

【问题讨论】:

标签: apache-kafka


【解决方案1】:

我正在将我的评论扩展为答案。

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

  1. 它限制了 Kafka 服务器所需的复杂性。将消息推送给消费者不是服务器的责任,它只是保存消息并等待消费者获取它们。
  2. 如果 Kafka 服务器将所有消息推送给消费者,它可能会压倒消费者。假设 Producer 以 10 msg/sec 的速度将消息推送到 Kafka Server,但某个 Consumer 只能处理 2 msg/sec。如果 Kafka 服务器试图将它收到的每条消息推送给该消费者,消费者很快就会被它接收到的消息数量所淹没。

可能还有其他原因,但目前我想到的就是这两个。

【讨论】:

  • 从消费者的角度来轮询 kafka msg 代理或服务器,在 .net 世界中实现的理想或推荐方式是什么?我想到的一种方法是 Windows 服务,但还有其他解决方案/方法吗?只想就本地/Windows 服务之外的其他选项集思广益。
猜你喜欢
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多