идемпотентность :( Семантика порядка-один раз для каждого раздела)
Идемпотентная доставка гарантирует, что сообщения доставляются ровно один раз в определенный раздел темы в течение срока действияодин производитель без потери данных.
Идемпотент - это одна из ключевых характеристик для достижения семантики Ровная однократная в Кафке. Чтобы установить «enable.idempotence = true», в конечном итоге получите семантику «ровно один раз» на раздел, что означает отсутствие дубликатов и потери данных для конкретного раздела. Если произошла ошибка, даже если производитель отправил сообщение несколько раз, он будет записан в Kafka один раз. Для одного раздела, производитель Idempotent гарантирует отсутствие дублирующих возможностей для каждого раздела в случае ошибки брокера.
Концепция PID и порядкового номера производителя Kafka для достижения идемпотента, как описано ниже:
PIDи порядковый номер
Идемпотентные производители используют идентификатор продукта (PID) и порядковый номер при создании сообщений. Производитель продолжает увеличивать порядковый номер каждого публикуемого сообщения, сопоставляя с уникальным PID. Брокер всегда сравнивает текущий порядковый номер с предыдущим и отклоняет его, если новый не на +1 больше предыдущего, что позволяет избежать дублирования, и в то же время, если в сообщениях пропадает больше, чем больше.
Примечание: При перезапуске производителя назначается новый PID. Таким образом, идемпотентность обещана только для одного сеанса продюсера
Если вы используете enable.idempotence = true, вы можете сохранить max.in.flight.requests.per.connection до 5, и вы можете достичьЗакажите гарантию, которая принесет лучшую параллельность и улучшит производительность.
Функция идемпотентности была введена в Kafka 0.11+, прежде чем мы сможем достичь некоторого уровня гарантированного уровня, используя max.in.flight.requests.per.connection с повторными попытками и установкой Acks:
max.in.flight.requests.per.connection to 1
max.retries bigger number
acks=all
max.in.flight.requests.per.connection = 1 : чтобы убедиться, что во время повторной отправки сообщений дополнительные сообщения отправляться не будут.
Это будет связано с затратами на производительность и пропускную способность, и это поощряет введение функции enable.idempotence для повышения производительности и в то же время гарантии заказа.