как я могу проверить Семантику Ровно один раз, работающую в моем приложении потоков кафки

#apache-kafka #apache-kafka-streams

Вопрос:

у меня есть DSL-приложение Kafka Streams, у нас есть требование к обработке ровно один раз, для того же я добавил конфигурацию

 streamConfig.put(processing.gurantee, "exactly_once");
 

Я использую кафку 2.7
У меня есть 2 запроса

  1. в чем разница между exactly_once и exactly_once_beta
  2. как мне проверить эту функциональность, чтобы убедиться, что мои сообщения обрабатываются только один раз

Спасибо!

Ответ №1:

exactly_once_beta это улучшение по exactly_once сравнению с предыдущим . В то время exactly_once как использует транзакционный производитель для каждой потоковой задачи (комбинация субтопологии и входного раздела, exactly_once_beta использует транзакционный производитель для каждого потока потока клиента потоков Кафки. Каждый производитель поставляется с отдельными буферами памяти, отдельным потоком, отдельными сетевыми подключениями, которые могут ограничить масштабирование количества входных разделов (т. Е. Количество задач). Большое количество производителей также может привести к увеличению нагрузки на брокеров. Следовательно, exactly_once_beta имеет лучшие характеристики масштабирования. Более подробную информацию вы можете найти в KIP-447.

Обратите внимание, что это exactly_once будет устаревшим и exactly_once_beta будет переименовано exactly_once_v2 в Apache Kafka 3.0. Более подробную информацию см. в KIP-732.

Для тестов вы можете черпать вдохновение из тестов в репозитории Apache Kafka:

В принципе, вам необходимо создать сценарий отработки отказа и убедиться, что сообщения не создаются несколько раз в выходных разделах. Обратите внимание, что сообщения могут обрабатываться несколько раз, но результаты в выходных разделах должны отображаться так, как если бы они были обработаны только один раз. Вы можете найти довольно хорошую лекцию о семантике «один раз», которая также объясняет сценарии отработки отказа здесь: https://www.confluent.io/kafka-summit-london18/dont-repeat-yourself-introducing-exactly-once-semantics-in-apache-kafka/