【发布时间】:2019-01-14 04:31:29
【问题描述】:
我正在尝试探索 KafkaConsumer 是否可以在消息到达主题时接收消息,而不是在特定时间间隔进行轮询。我知道 Kafka 是消费者端的拉动机制,是否可以实现上述要求,因为我不确定消息何时到达并且不确定将哪个优化值设置为轮询时间间隔?
【问题讨论】:
标签: apache-kafka kafka-consumer-api
我正在尝试探索 KafkaConsumer 是否可以在消息到达主题时接收消息,而不是在特定时间间隔进行轮询。我知道 Kafka 是消费者端的拉动机制,是否可以实现上述要求,因为我不确定消息何时到达并且不确定将哪个优化值设置为轮询时间间隔?
【问题讨论】:
标签: apache-kafka kafka-consumer-api
这是不可能的,因为这是 Kafka 底层协议在网络上的工作方式。这是一个纯粹的基于请求/响应的协议,因此没有从代理到客户端的“推送”机制。 考虑一下,例如,如果分区的领导者发生变化,消费者直到它尝试获取消息(或获取元数据)并且代理回复领导者更改时才知道这一点(因此没有从那里推送警报)经纪人对消费者说“我不再是领导者”了)。这只是一个更好地解释协议本质的例子。
【讨论】:
正如 ppatierno 所说,这是不可能的。但是,您可以创建具有低延迟、接近实时的消费者客户端。有多种选择可以实现它。以下是其中的一部分。
Kafka 流是最简单的方法,因为它不需要像其他人那样进行任何额外的设置。
【讨论】:
根据设计,Kafka Consumer 遵循拉取模型。因此,不可能在消息到达时获得“触发器”。 就轮询时间间隔而言,应该根据消耗的主题的吞吐量以及您希望一次性处理多少条消息来配置。 50ms 的值适用于大多数应用程序。
【讨论】: