Кафки потоки ровно один раз для обработки сценария использования - PullRequest
0 голосов
/ 10 января 2019

У меня есть случай, когда мне нужно прочитать данные из темы, а затем пакетные данные (100 записей) и записать пакет в определенный файл или внешнее хранилище. Я планирую использовать процессор API для этого и пакетировать данные в методе процесса, используя хранилище состояний при поддержке kafka и записывать в файл, как только размер пакета достигнет 100 записей. Очистите партию из государственного хранилища, чтобы создать новую новую партию.

Еще одно требование состоит в том, что у нас не может быть дубликатов в данных. Это означает, что одна и та же запись не может быть в двух разных партиях.

Подходит ли поток только один раз для этого варианта использования? Я прочитал в дизайне, что это не рекомендуется, если мы собираем данные, и большинство статей об этом говорят, что Ровно один раз работает только в случае процесса потребления и создания шаблона.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Как указано @Matthias, ровно одна семантика работает только с потоками Kafka для приложения типа потоков Kafka, интеграция с внешней системой может нарушить семантику. Вы можете прочитать больше об этом в этой статье.

Я бы посоветовал вам использовать Kafka Consumer API, поскольку он обеспечит наилучший баланс между гибкостью и абстракцией для вашего варианта использования. Все, что вам нужно сделать, это удалить enable.auto.commit = false и зафиксировать вручную после успешной записи пакета во внешнюю систему с помощью consumer.commitSync ();

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

Вы можете проверить эту статью, если это поможет.

0 голосов
/ 13 января 2019

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

...