Кафка Стримс StateStores отказоустойчивость ровно один раз? - PullRequest
0 голосов
/ 08 февраля 2019

Мы пытаемся создать сервис дедупликации, используя Kafka Streams.Общая картина состоит в том, что он будет использовать свое хранилище состояний rocksDB для проверки существующих ключей во время процесса.

Пожалуйста, исправьте меня, если я ошибаюсь, но чтобы сделать эти stateStores отказоустойчивыми, API потоков Kafka будет прозрачноскопируйте значения в stateStore внутри раздела Kafka (так называемый журнал изменений).Таким образом, если наш сервис упадет, другой сервис сможет перестроить свой StateStore в соответствии с changeLog, найденным в Kafka.

Но, на мой взгляд, возникает вопрос, сделайте этот «StateStore -> changelog» самточно один раз?Я имею в виду, когда служба обновит свой stateStore, она также обновит журнал изменений ровно один раз.?Если служба аварийно завершает работу, другой загрузит ее, но можем ли мы быть уверены, что она не пропустит обновление stateStore службы аварийного завершения?

С уважением,

Янник

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Но, на мой взгляд, возникает вопрос, а сам ли этот «StateStore -> changelog» ровно один раз?

Да - как уже говорили здесь другие.Конечно, вы должны сконфигурировать ваше приложение для использования семантики «ровно один раз» через параметр конфигурации processing.guarantee, см. https://kafka.apache.org/21/documentation/streams/developer-guide/config-streams.html#processing-guarantee (эта ссылка для Apache Kafka 2.1).

Мыпытаясь добиться службы дедупликации с помощью Kafka Streams.Общая картина заключается в том, что он будет использовать свое хранилище состояний rocksDB для проверки существующих ключей во время процесса.

Также имеется пример приложения дедупликации событий по адресу https://github.com/confluentinc/kafka-streams-examples/blob/5.1.0-post/src/test/java/io/confluent/examples/streams/EventDeduplicationLambdaIntegrationTest.java..в ветку репо для Confluent Platform 5.1.0, в которой используется Apache Kafka 2.1.0 = последняя версия Kafka, доступная прямо сейчас.

0 голосов
/ 08 февраля 2019

Краткий ответ - да.

Использование транзакции - атомарная многосегментная запись - Kafka Streams гарантирует, что при выполнении фиксации смещения хранилище состояний также мигало в теме журнала изменений на брокерах.Вышеуказанные операции являются атомарными, поэтому, если одна из них завершится неудачно, приложение обработает сообщения с предыдущей позиции смещения.

Вы можете прочитать в следующем блоге больше о том, как именно семантически https://www.confluent.io/blog/enabling-exactly-kafka-streams/. Есть раздел: How Kafka Streams Guarantees Exactly-Once Processing.

...