【问题标题】:Difference between KafkaTemplate and KafkaProducer send method?KafkaTemplate 和 KafkaProducer 发送方法的区别?
【发布时间】:2021-04-21 08:16:28
【问题描述】:

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

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

看过KafkaProducerhttps://kafka.apache.org/10/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html的文档

Spring KafkaTemplate

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

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

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

我们将不胜感激。

【问题讨论】:

  • spring kafka 是 apache kafka 上的 juat 包装库,您可以根据自己的需要使用其中一个
  • 就个人而言,我更喜欢 KafkaProducer 而不是 spring 包装器,但不会增加太多复杂性。您的要求可以通过使用flush()(在两个客户端都可用)来满足

标签: java spring-boot apache-kafka spring-kafka


【解决方案1】:

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

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

阅读此链接::

What is the difference between Kafka Template and kafka producer?

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

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

acks参数有3个值:

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

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

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

Best way to configure retries in Kaka Producer

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多