Как избежать истечения транзакции в приложении Kafka Streams с незанятыми потоками - PullRequest
0 голосов
/ 30 октября 2019

Я использую Kafka Streams в критически важном приложении, и у меня возникают проблемы, когда транзакции истекают в свободных потоках. Это вызывает проблемы после перебалансировки, когда задача переходит к ранее незанятому потоку, где истек срок действия производителя. Однако это не становится очевидным, пока производитель не попытается отправить в первый раз, и в этот момент он генерирует исключение ProducerFencedException и поток не завершает свою работу. Затем нам нужно перезапустить приложение, чтобы заставить его снова начать обработку, что неприемлемо.

Вот настройка приложения:

  • Отдельная тема с 2 разделами
  • 4 экземпляра приложения Spring Boot, работающего с 2 потоковыми потоками на экземпляр приложения. Причина для дополнительных экземпляров заключается в том, что это критически важное приложение, и мы должны допустить, чтобы 2 экземпляра приложения могли быть недоступны из-за исправлений сервера и при этом иметь отказоустойчивость благодаря наличию нескольких экземпляров приложения (т. Е. 2). Каждое приложение способно выполнять полную загрузку самостоятельно в рамках SLA

Буду признателен за любую информацию о том, как мы можем настроить наше приложение Kafka Streams или кластер Kafka, чтобы не завершать транзакции с этой настройкой.

Соответствующие версии: версия кластера Kafka: 1.0.0, версия клиента Kafka: 1.1.0, версия Spring Boot: 2.0.0

...