Как управлять идентификаторами транзакций в приложении, в котором запущено несколько процессов в Kafka Confluent Golang? - PullRequest
0 голосов
/ 14 июля 2020

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

Состояние документации:

Экземпляр производителя настроен для транзакций путем установки идентификатора transactional.id, уникального для приложения. Этот идентификатор будет использоваться для ограждения устаревших транзакций из предыдущих экземпляров приложения, обычно> после сбоя или ошибки sh.

Я генерирую stati c идентификатор транзакции в начале приложения. Это будет означать, что при нескольких вызовах API (одновременно для разных процессов) будет использоваться один и тот же идентификатор транзакции. Разве это не приведет к тому, что несколько процессов будут производить данные последовательно?

Это правильный способ сделать это? А если нет, то как мне это улучшить?

1 Ответ

0 голосов
/ 14 июля 2020

Благодаря идемпотентности и транзакциям в Kafka вы можете получить гарантию точно один раз в Kafka. Но похоже, что вам нужна гарантия хотя бы один раз . Это гарантирует, что сообщение журнала никогда не будет потеряно, но может быть продублировано.

Чтобы включить эту гарантию, вам необходимо в продюсере установить acks=all . Всякий раз, когда вы создаете что-то для kafka, данные не теряются, пока одна синхронизированная c реплика жива.

Я работал с критическими журналами раньше, а Kafka с acks=all ставил, проблем никогда не было. Данные у производителя были потеряны еще до того, как войти в домен Кафки.

Возможно, я неправильно понял ваш вопрос, дайте мне знать, если это так.

...