java - 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
我无法做出决定,比如什么是理想的使用,或者至少使用一个而不是另一个的原因尚不清楚?
我需要的是我希望操作同步,即我想知道发布是否成功,因为如果记录没有传递,我需要重试发布。
任何帮助将不胜感激。
解决方案
对于您的第一个问题,我应该使用 kafka Template 还是 Kafka producer?
Kafka Producer 在 Apache Kafka 中定义。KafkaTemplate 是 Spring 对它的实现(虽然它没有直接实现 Producer),所以它提供了更多的方法供你使用。
阅读此链接::
Kafka Template 和 kafka producer 有什么区别?
对于重试机制,以防发布失败。我已经在另一个问题中回答了这个问题。
acks 参数控制在生产者认为写入成功之前必须接收多少个分区副本。
acks 参数有 3 个值:
acks=0,生产者在假设消息发送成功之前不会等待代理的回复。
acks=1,生产者将在领导副本收到消息的那一刻收到来自代理的成功响应。如果无法将消息写入领导者,生产者将收到错误响应并可以重试。
acks=all,一旦所有同步副本都收到消息,生产者将收到来自代理的成功响应。
推荐阅读
- python - 我怎样才能杀死后台python进程?
- kubernetes - 使用 helm 模板助手创建过滤列表
- macos - 在 Mac OS 上的 Visual Studio 解决方案文件夹中,带有三个白点的红点是什么意思?
- aeron - 如何动态指定Aeron Cluster的leader节点?
- laravel - Laravel GraphQL UUID 作为 ID 无法按预期工作
- encryption - RSA 中的私钥和公钥概念
- laravel - laravel中超过3个表之间的雄辩关系
- anaconda - mini conda vs anaconda - 安装环境最佳实践问题
- c++ - 带有 break 语句的并行 OpenMP 循环
- java - Spring-boot:找不到bean