【问题标题】:how to optimize a .kafka producer in java.?如何在 java 中优化 .kafka 生产者?
【发布时间】:2020-02-15 02:01:48
【问题描述】:
@Configuration
public class KafkaConfiguration {
    @Value("${kafka.boot.server}")
    private String kafkaServer;

   @Bean    
   public KafkaTemplate<String,String> kafkaTemplate(){
       return new KafkaTemplate<>(producerConfig());}

   @Bean
   public ProducerFactory<String,String> producerConfig() {
       Map<String,Object> config= new HashMap<>();
       config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaServer);
       config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.class );
       config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,JsonSerializer.class);          return new DefaultKafkaProducerFactory<>(config);
   }
}

kafka 的先决条件是什么?您对发布消息有何建议?还有哪些其他可能的方法?

【问题讨论】:

  • 为什么需要优化?
  • 您希望通过改进配置达到什么目的?

标签: java apache-kafka microservices


【解决方案1】:
  1. delivery.timeout.ms: 如果你的情况是短时间内出现大量事件,这个值应该更高,因为当网络繁忙时,你的客户端会抱怨NetworkException,增加它你可以看到更少的NetworkException

了解什么是delivery.timeout.ms

https://cwiki.apache.org/confluence/display/KAFKA/KIP-91+Provide+Intuitive+User+Timeouts+in+The+Producer?source=post_page-----fa3910d9aa54----------------------#KIP-91ProvideIntuitiveUserTimeoutsinTheProducer-TestPlan

  1. acks:如果您不需要丢失数据。您必须将其设置为all。默认值为 1 和 领导者会将记录写入其本地日志,但会在不等待所有追随者的完全确认的情况下做出响应。在这种情况下,如果领导者在确认记录后但在追随者复制它之前立即失败,那么记录将丢失。

  2. retries:这取决于你的 kafka 客户端版本。现在默认重试次数是 Integer.Max, 但对于较早的版本,您希望将 retries 设置为更高的值,这样您的生产者就不会因为无法访问领导分区的一个简单异常而停止。

  3. Exactly-once:如果你的应用需要Exactly-once,你必须参考enable.idempotencetransactional.id

注意这里提到的配置应该可以在你的java客户端中找到对应的enums

生产者设置的进一步参考: https://docs.confluent.io/current/installation/configuration/producer-configs.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2023-03-22
    • 1970-01-01
    • 2019-01-14
    • 2013-10-15
    相关资源
    最近更新 更多