Как оптимизировать производителя .kafka в Java.? - PullRequest
0 голосов
/ 18 октября 2019
@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);
   }
}

Каковы предпосылки для кафки? Что вы предлагаете для публикации сообщения? Какие еще есть способы?

1 Ответ

0 голосов
/ 18 октября 2019
  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

acks: если вам не нужна потеря данных. Вы должны установить его на all. По умолчанию установлено значение 1, и ведущий записывает запись в свой локальный журнал, но отвечает, не ожидая полного подтверждения от всех подписчиков. В этом случае, если лидер выйдет из строя сразу после подтверждения записи, но до того, как подписчики реплицируют ее, запись будет потеряна.

retries: Это зависит от версии клиента kafka. Теперь повторными попытками по умолчанию является Integer.Max, но для более ранних версий вы захотите установить retries на более высокое значение, чтобы ваш производитель не останавливался из-за одного простого исключения, что раздел лидера недоступен.

Ровно один раз: если ваше приложение требует ровно один раз, вы должны обратиться к enable.idempotence и transactional.id

Обратите внимание, что упомянутые здесь конфиги должныможно найти соответствующий enums в вашем Java-клиенте

Дальнейшие ссылки на настройки производителя: https://docs.confluent.io/current/installation/configuration/producer-configs.html

...