每当消息到达某个主题时,在Kafka中是否有可能在消费者端接收消息,而不是以固定间隔轮询

时间:2018-08-07 07:04:09

标签: apache-kafka kafka-consumer-api

我正在尝试探究KafkaConsumer是否可以在消息到达主题时接收消息,而不是在特定时间间隔进行轮询。我知道Kafka是用户方的拉动机制,是否可以达到上述要求,因为我不确定消息何时到达,并且不确定将哪个最佳值设置为轮询时间间隔?

3 个答案:

答案 0 :(得分:1)

这是不可能的,因为这是底层Kafka协议在网络上的工作方式。这是一个纯粹的基于请求/响应的协议,因此没有从代理到客户端的“推送”机制。 想想看,例如,如果某个分区的领导者发生了变化,那么消费者在尝试获取消息(或获取元数据)之前不会意识到这一点,并且代理回答该领导者发生了变化(因此不会从中推送警报)经纪人立即在消费者面前说“我不再是领导者”)。这只是一个更好地解释协议本质的示例。

答案 1 :(得分:0)

如ppatierno所述,这是不可能的。但是,您可以创建低延迟,接近实时的消费者客户端。有多种选择可以实现它。以下是其中一些。

  1. 卡夫卡流
  2. Apache Flume
  3. Apache Spark(火花连续流(延迟约1ms))

Kafka流是最简单的方法,因为它不需要像其他任何其他设置。

答案 2 :(得分:0)

通过设计,Kafka Consumer遵循拉模型。因此,不可能在消息到达时获得“触发”。 就轮询时间间隔而言,应根据所消耗主题的吞吐量以及您要一次性处理多少消息来进行配置。 50ms的值适用于大多数应用。