Spring Kafka:使用`onMessage`

时间:2017-11-15 11:27:12

标签: spring apache-kafka kafka-consumer-api spring-kafka

我在我的项目中使用Spring Kafka,因为它似乎是基于Spring的项目中使用Kafka消息的自然选择。要使用消息,我可以使用MessageListener接口。 Spring Kafka内部负责为每条新消息调用onMessage方法。

但是,在我的设置中,我更喜欢显式轮询新消息并按顺序处理它们(这将需要几秒钟)。作为一种解决方法,我可能会阻止我的onMessage实现,或者在内部缓冲消息。然而,这似乎违背了Spring Kafka的核心理念。

Kafka旨在让消费者不得不轮询新邮件,这符合我的要求。有没有办法利用Spring Kafka的这种“自然”工作流程?

我是否应避免将Spring Kafka用于此用例?

KafkaConsumer documentation州:

  

对于消息处理时间变化不可预测的用例,   这两种选择都不够。推荐的方式   处理这些情况是将消息处理移动到另一个线程,   这允许消费者在处理器时继续调用poll   还在工作必须注意确保承诺   偏移量不会超过实际位置。通常,你必须   禁用自动提交并手动提交已处理的偏移量   仅在线程完成处理后记录(取决于   你需要的交付语义)。另请注意,您需要   暂停分区,以便不从轮询中接收新记录   直到线程完成处理之前返回的那些之后。

相关问题:https://github.com/spring-projects/spring-kafka/issues/195

1 个答案:

答案 0 :(得分:2)

现在已经解决了必须继续对消费者进行投票的问题(在KIP-62的0.10.1.x中),这不再是问题(只要你不超过{{1默认情况下,这是5分钟,但可以增加。

但是,如果你想自己调查一下,你仍然可以使用spring-kafka(例如,如果你使用Boot,可以获得Spring Boot自动配置的好处),但你可以从{{max.poll.interval.ms获得Consumer 1}}和DefaultKafkaConsumerFactory直接。