Springs Kafka Consumer最佳实践:消费者应该收到什么样的消息

pod*_*i17 2 java apache-kafka spring-boot kafka-consumer-api spring-kafka

我需要开始使用卡夫卡。我很难弄清楚消费者应该收到什么:根据我的理解,我们可以通过多种方式配置消费者:

示例1:

@KafkaListener(topics = "topic_name)
public void receiveSimpleString(@Payload String message) {
}
Run Code Online (Sandbox Code Playgroud)

示例2:

@KafkaListener(topics = "topic_name)
public void receiveConsumerRecord(@Payload ConsumerRecord<String, String> message) {
}
Run Code Online (Sandbox Code Playgroud)

示例3:

@KafkaListener(topics = "topic_name)
public void receiveObject(@Payload SomeCustomClass message) {
}
Run Code Online (Sandbox Code Playgroud)

示例4:

@KafkaListener(topics = "topic_name)
public void receiveSpringMessage(@Payload org.springframework.messaging.Message<T> message) {
}
Run Code Online (Sandbox Code Playgroud)

也许还有更多的方法,但那些曾经是我在研究 kafka+spring 时最常看到的。

现在的问题是:

是否有关于消费者应该收到什么的最佳实践?不同的例子有优点/缺点吗?

Jul*_*ian 6

这没有黄金法则,这完全取决于您的具体用例。有些人,包括我自己,更喜欢通过ConsumerRecord实例接收数据。这样您不仅可以访问实际的有效负载,还可以访问它附带的整个元数据。

您可能值得研究一下Kafka Streams API。这通常是从 Kafka 消费并向 Kafka 生产时使用的模式,因为exactly once delivery.