首页 > 解决方案 > KafkaTemplate 和 KafkaProducer 发送方法的区别?

问题描述

我的问题是在使用 kafka 的 Spring Boot 微服务中,什么适合使用 KafkaTemplate.send() 或 KafkaProducer.send()

我使用 KafkaConsumer 而不是 KafkaListner 来轮询记录,因为 KafkaListner 正在获取记录,当它们进入主题时,我希望根据业务需求定期轮询记录。

已浏览KafkaProducer的文档 https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html

Spring KafkaTemplate

https://docs.spring.io/spring-kafka/reference/html/#kafka-template

我无法做出决定,比如什么是理想的使用,或者至少使用一个而不是另一个的原因尚不清楚?

我需要的是我希望操作同步,即我想知道发布是否成功,因为如果记录没有传递,我需要重试发布。

任何帮助将不胜感激。

标签: javaspring-bootapache-kafkaspring-kafka

解决方案


对于您的第一个问题,我应该使用 kafka Template 还是 Kafka producer?

Kafka Producer 在 Apache Kafka 中定义。KafkaTemplate 是 Spring 对它的实现(虽然它没有直接实现 Producer),所以它提供了更多的方法供你使用。

阅读此链接::

Kafka Template 和 kafka producer 有什么区别?

对于重试机制,以防发布失败。我已经在另一个问题中回答了这个问题。

acks 参数控制在生产者认为写入成功之前必须接收多少个分区副本。

acks 参数有 3 个值:

acks=0,生产者在假设消息发送成功之前不会等待代理的回复。

acks=1,生产者将在领导副本收到消息的那一刻收到来自代理的成功响应。如果无法将消息写入领导者,生产者将收到错误响应并可以重试。

acks=all,一旦所有同步副本都收到消息,生产者将收到来自代理的成功响应。

在 Kaka Producer 中配置重试的最佳方式


推荐阅读