Apache kafka 在卡夫卡中,当消息到达某个主题时,是否有可能在消费者端接收消息,而不是在特定的时间间隔进行轮询

Apache kafka 在卡夫卡中,当消息到达某个主题时,是否有可能在消费者端接收消息,而不是在特定的时间间隔进行轮询,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我试图探索KafkaConsumer是否可以在消息到达主题时接收消息,而不是在特定的时间间隔进行轮询。我知道Kafka是消费者端的一种拉动机制,是否有可能实现上述要求,因为我不确定消息何时到达,也不确定将什么优化值设置为轮询时间间隔?这是不可能的,因为这是Kafka协议在电线上的工作方式。它是一个纯粹的基于请求/响应的协议,因此没有从代理到客户机的“推送”机制。 试想一下,如果一个分区的领导者发生了变化,例如,消费者直到尝试获取消息(或获取元数据)并且代理回答领导者发生了变化(因此不会在发生后立

我试图探索KafkaConsumer是否可以在消息到达主题时接收消息,而不是在特定的时间间隔进行轮询。我知道Kafka是消费者端的一种拉动机制,是否有可能实现上述要求,因为我不确定消息何时到达,也不确定将什么优化值设置为轮询时间间隔?

这是不可能的,因为这是Kafka协议在电线上的工作方式。它是一个纯粹的基于请求/响应的协议,因此没有从代理到客户机的“推送”机制。
试想一下,如果一个分区的领导者发生了变化,例如,消费者直到尝试获取消息(或获取元数据)并且代理回答领导者发生了变化(因此不会在发生后立即从代理推送到消费者说“我不再是领导者”时才意识到这一点)。这只是一个更好地解释协议性质的示例。

正如ppatierno所述,这是不可能的。但是,您可以创建低延迟、接近实时的客户机。实现这一目标有多种选择。下面是其中的一些

  • 卡夫卡河
  • 阿帕奇水槽
  • Apache Spark(Spark连续流媒体传输(延迟约1ms))

  • 卡夫卡流是最简单的方式,因为它不需要像其他人一样进行任何额外设置。

    根据设计,卡夫卡消费者遵循拉模式。因此,不可能在消息到达时获取“触发器”。 就轮询时间间隔而言,应根据所使用主题的吞吐量以及一次处理多少消息来配置轮询时间间隔。50ms的值适用于大多数应用程序