Hey Habr!
เบเปเบญเบเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบตเบกเบเบฒเบ Tinkoff, เปเบเบดเปเบเบเปเบฒเบฅเบฑเบเบเบฑเบเบเบฐเบเบฒเบชเบนเบเปเบเปเบเปเบเบทเบญเบเบเบญเบเบเบปเบเปเบญเบ. เบเปเบญเบเบชเปเบงเบเบซเบผเบฒเบเปเบกเปเบเบเบฑเบเบเบฐเบเบฒเปเบ Java เปเบเบเปเบเป Spring boot เปเบฅเบฐเปเบเปเปเบเบเบฑเบเบซเบฒเบเปเบฒเบเบงเบดเบเบฒเบเบฒเบเบเปเบฒเบเปเบเบตเปเปเบเบตเบเบเบทเปเบเปเบเปเบเบเบเบฒเบ.
เบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบธเบเบฅเบฐเบเบฒเบเบชเปเบงเบเปเบซเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบดเบเบเปเปเบชเบทเปเบชเบฒเบเบเบฑเบเปเบเบเบเปเปเบเบปเบเบเบฑเบเบเปเบฒเบเบเบฒเบเบเบฒเบเปเปเบฒเบเปเปเบเบงเบฒเบก. เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเบงเบเปเบฎเบปเบฒเปเบเป IBM MQ เปเบเบฑเบเบเบฒเบเบซเบเปเบฒ, เปเบเบดเปเบเบเปเปเบชเบฒเบกเบฒเบเบฎเบฑเบเบกเบทเบเบฑเบเบเบฒเบเปเบซเบผเบเปเบเป, เปเบเปเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบเบกเบตเบเบฒเบเบฎเบฑเบเบเบฐเบเบฑเบเบเบฒเบเบเบฑเบเบชเบปเปเบเบชเบนเบ.
เปเบเบฑเบเบเบฒเบเบเบปเบเปเบเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบทเบเบชเบฐเปเบซเบเบตเปเบซเป Apache Kafka, เบเบตเปเบกเบตเบเปเบฒเปเบฎเบเบเบฒเบเบเบฐเบซเบเบฒเบเบชเบนเบ, เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบงเบดเบเบตเบเบฒเบเปเบเบทเบญเบเบชเปเบงเบเบเบธเบเบเบปเบเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบชเปเบฒเบฅเบฑเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบปเบเปเบเบเบฒเบเบเบฑเบเบชเบปเปเบเบขเปเบฒเบเบซเบเปเบญเบเบซเบเบถเปเบเบเบฑเปเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบ Kafka เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเปเปเปเบเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบฎเบฑเบเบชเบฒเบฅเบฐเบเบฑเบเบเบงเบฒเบกเบชเบญเบเบเปเบญเบเบเบตเปเบเปเบญเบเบเบฒเบเบญเบญเบเบเบฒเบเบเปเบญเบ. เบเปเปเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบเปเบเบเบฑเบเบเบฐเบชเบปเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒ Kafka, เปเบเบเบชเบฐเปเบเบฒเบฐ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบญเบเบเปเบฒเบเบงเบดเบเบตเบเบฒเบ configure เปเบฅเบฐเบเปเบฒเบฅเบปเบเบเบตเบงเบดเบเบเบฑเบเปเบเปเบเบญเบเบซเบเบถเปเบเบเบฑเปเบเบเบฒเบเบเบฑเบเบชเบปเปเบ.
เบฎเบฑเบเบเบฐเบเบฑเบเบเบฒเบเบเบฑเบเบชเบปเปเบ เปเบฅเบฐเบญเบทเปเบเปเบญเบตเบ
เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเบชเบปเบเบเบฐเบเบฒเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบเบฐเบเปเบงเบเบเปเบญเบเบเบฑเบเบเบฑเบเบซเบฒเบเปเบฒเบเบงเบเบซเบเบถเปเบเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเปเบเบเบญเบเบเบปเปเบ. เปเบเปเบเปเบฒเบญเบดเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเบเบฐเปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบซเบเบถเปเบเบเบตเปเบเบฐเบชเปเบฒเบเบเบงเบฒเบกเบชเบฐเบเบงเบเปเบเบเบฒเบเบเบตเบเบฑเบเบเบตเปเปเบเบฑเบเปเบเปเบเป.
เบเบตเปเบเบฐเบเปเบงเบเปเบซเป client.id เบชเปเบฒเบฅเบฑเบเบเบนเปเบเบฐเบฅเบดเบเปเบฅเบฐเบเบนเปเบเปเบฅเบดเปเบเบ. เบขเบนเป glance เบเปเบฒเบญเบดเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบทเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒ, เปเบฅเบฐเปเบเบเปเบฅเบฐเบเบตเบซเบผเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเปเบฎเบฑเบเบงเบฝเบ. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบชเบฐเบเบฒเบเบฐเบเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเปเบฒเปเบเปเบเบนเปเบเปเบฅเบดเปเบเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเปเบฅเบฐเบเปเบฒเบเปเบซเปเบเบงเบเปเบเบปเบฒเปเบเบฑเบ client.id เบเบฝเบงเบเบฑเบ, เบเบปเบเปเบเปเบฎเบฑเบเปเบเบเบฒเบเปเบเบทเบญเบเปเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
org.apache.kafka.common.utils.AppInfoParser โ Error registering AppInfo mbean javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=kafka.test-0
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเป JMX เปเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเบกเบต Kafka, เบเบตเปเบญเบฒเบเบเบฐเปเบเบฑเบเบเบฑเบเบซเบฒ. เบชเปเบฒเบฅเบฑเบเบเปเบฅเบฐเบเบตเบเบตเป, เบกเบฑเบเบเบตเบเบตเปเบชเบธเบเบเบตเปเบเบฐเปเบเปเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบญเบเบเบทเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบฅเบฐเบเบปเบงเบขเปเบฒเบ, เบเบทเปเบซเบปเบงเบเปเปเปเบเบฑเบเบเปเบฒ client.id. เบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเปเปเบเบเบปเบเปเบเปเบฎเบฑเบเบเปเบฒเบชเบฑเปเบ kafka-consumer-groups เบเบฒเบเบเบปเบเบเบฐเปเบซเบเบเบเบฒเบ Confluent:
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบตเปเบฎเบฑเบเบเบฐเบเบฑเบ. Kafka เบเบนเปเบเบฐเบฅเบดเบเบกเบตเบเบฒเบฅเบฒเบกเบดเปเบเบต acks, เปเบเบดเปเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบซเบเบปเบเบเปเบฒเบซเบผเบฑเบเบเบฒเบเบเปเบฒเบเบงเบเบเบฒเบเบฎเบฑเบเบฎเบนเปเบเบตเปเบเบนเปเบเปเบฒเบเบธเปเบกเบเปเบญเบเบเบฒเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเปเปเบเบงเบฒเบกเบเบตเปเบเบฝเบเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ. เบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบเปเบฒเบเปเปเปเบเบเบตเป:
- 0 โ เบเบฒเบโเบฎเบฑเบโเบฎเบนเปโเบเบฐโเบเปเปโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบดโเบเบฒโเบฅเบฐโเบเบฒโ.
- 1 เปเบเบฑเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบฅเบตเปเบกเบเบปเปเบ, เบเบฝเบเปเบเป 1 replica เบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบฎเบฑเบเบฎเบนเป.
- โ1 โ เบเปเบญเบโเบกเบตโเบเบฒเบโเบฎเบฑเบโเบฎเบนเปโเบเบฒเบโเบเบฒเบโเบเปเบฒโเบฅเบญเบโเบเบตเป synchronized เบเบฑเบโเบซเบกเบปเบ (เบเบฒเบโเบเบฑเปเบโเบเปเบฒโเบเบธเปเบก min.insync.replicas).
เบเบฒเบเบเปเบฒเบเบตเปเบฅเบฐเบเบธเปเบงเปเบกเบฑเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเบงเปเบฒ acks เปเบเบปเปเบฒเบเบฑเบ โ1 เปเบซเปเบเบฒเบเบเปเปเบฒเบเบฐเบเบฑเบเบเบตเปเปเบเบฑเปเบกเปเบเบเบเบตเปเบชเบธเบเบงเปเบฒเบเปเปเบเบงเบฒเบกเบเบฐเบเปเปเบชเบนเบเปเบชเบ.
เบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบธเบเบเบปเบเบฎเบนเป, เบฅเบฐเบเบปเบเบเบฒเบเปเบเบเบขเบฒเบเปเบกเปเบเบเปเปเบซเบเปเบฒเปเบเบทเปเบญเบเบท. เปเบเบทเปเบญเบเบปเบเบเปเบญเบเบเบงเบฒเบกเบเบดเบเบเบปเปเบงเบเบฒเบง, Kafka Producer เปเบซเปเบเบฒเบเปเบฅเบทเบญเบ เบฅเบญเบเปเป, เปเบเบดเปเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบเปเบฒเบเบงเบเบเบญเบเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบชเบปเปเบเบเบทเบเบเบฒเบเปเบ delivery.timeout.ms. เปเบเบทเปเบญเบเบเบฒเบเบเบฒเบฃเบฒเบกเบดเปเบเบต retries เบกเบตเบกเบนเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบ Integer.MAX_VALUE (2147483647), เบเปเบฒเบเบงเบเบเบฒเบเบฅเบญเบเบเปเปเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบฑเบเปเบเปเปเบเบเบเบฒเบเบเปเบฝเบเบเบฝเบเปเบเป delivery.timeout.ms เปเบเบปเปเบฒเบเบฑเปเบ.
เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบเปเบฒเบงเปเบเบชเบนเปเบเบฒเบเบเบฑเบเบชเบปเปเบเบขเปเบฒเบเปเบเปเบเบญเบ
เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเบฅเบฐเบเบธเปเบงเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบนเปเบเบฐเบฅเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบตเปเบกเบตเบเบฒเบเบเปเปเบฒเบเบฐเบเบฑเบเบชเบนเบ. เบเบญเบเบเบตเปเปเบซเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบเบฝเบเปเบเปเบซเบเบถเปเบเบชเปเบฒเปเบเบปเบฒเบเบญเบเบเปเปเบเบงเบฒเบกเบเบทเบเบเบฝเบเปเบชเปเบซเบปเบงเบเปเป Kafka? เปเบเบเปเบฅเบฐเบเบตเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบ, เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเปเบฒเบเบปเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเปเบฝเบงเบเบฑเบเบเบนเปเบเบฐเบฅเบดเบ enable.idempotence เบเบฑเบเบเบงเบฒเบกเบเบดเบ. Idempotency เบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบเปเปเบเบงเบฒเบกเบเบฝเบงเบเบทเบเบเบฝเบเปเบชเปเบชเปเบงเบเบชเบฐเปเบเบฒเบฐเบเบญเบเบซเบปเบงเบเปเปเบซเบเบถเปเบ. precondition เบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเปเบฎเบฑเบโเปเบซเป ideempotency เปเบกเปเบโเบเปเบฒโ acks = เบเบฑเบเปเบปเบ, เบฅเบญเบเปเปเป > 0, max.in.flight.requests.per.connection โค 5. เบเปเบฒเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบซเบผเบปเปเบฒเบเบตเปเบเปเปเบเบทเบเบเปเบฒเบเบปเบเปเบเบเบเบนเปเบเบฑเบเบเบฐเบเบฒ, เบเปเบฒเบเปเบฒเบเปเบเบดเบเบเบฐเบเบทเบเบเบฑเปเบเบเปเบฒเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
เปเบกเบทเปเบญ idempotency เบเบทเบเบเปเบฒเบเบปเบ, เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบเปเบฒเปเบเบฑเบเปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบเปเปเบเบงเบฒเบกเบเบฝเบงเบเบฑเบเบชเบดเปเบเบชเบธเบเบฅเบปเบเปเบเบเบฒเบเปเบเปเบเบเบฑเบเบเบฝเบงเบเบฑเบเบเบธเบเปเบเบฑเปเบ. เบญเบฑเบเบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเบเบฒเบเบเบฑเปเบเบฅเบฐเบซเบฑเบ partitioner.class เปเบฅเบฐเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบเบฑเบ Producer. เปเบซเปเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเบธเบเปเบ. เบกเบฑเบเบเปเบญเบเบเบทเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบทเปเบเบชเบฐเปเบซเบเบตเปเบเปเบฅเบฐเบเบปเบ. เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเบเปเบฒเบเปเบเบเบเบฒเบเปเบเป ID เบเบธเบฅเบฐเบเบดเบเปเบเปเบเบฒเบเบเบฒเบเบเบญเบเบเบปเปเบเบชเบฐเบเบฑเบ. เบเบฒเบฃเบฒเบกเบดเปเบเบต partitioner.class เบกเบตเบกเบนเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ โ
- เบเปเบฒเบเบฒเบเปเบเปเบเบเบฑเบเบเบทเบเบฅเบฐเบเบธเบขเปเบฒเบเบเบฑเบเปเบเบเปเบเปเบงเบฅเบฒเบชเบปเปเบเบเปเปเบเบงเบฒเบก, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบกเบฑเบ.
- เบเปเบฒเบเบฒเบเปเบเปเบเบเบฒเบเบดเบเบฑเบเบเปเปเปเบเปเบเบทเบเบฅเบฐเบเบธ, เปเบเปเบเบฐเปเบเบเบทเบเบฅเบฐเบเบธ, เปเบฅเบทเบญเบเบเบฒเบเบดเบเบฑเบเปเบเบ hash เบเบญเบเบเบต.
- เบเปเบฒเบเบฒเบเปเบเปเบเบเบฒเบเบดเบเบฑเบเปเบฅเบฐเบเบฐเปเบเบเปเปเปเบเปเบเบทเบเบฅเบฐเบเบธ, เปเบฅเบทเบญเบเบเบฒเบเบดเบเบฑเบเบซเบเบถเปเบเปเบเบเบซเบเบถเปเบ (round-robin).
เบเบญเบเบเบฒเบเบเบตเป, เบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบชเบปเปเบเบเบตเปเบชเปเบฒเบเบฑเบเปเบฅเบฐ ideempotent เบเบฑเบเบเบฒเบฅเบฒเบกเบดเปเบเบต max.in.flight.requests.per.connection = 1 เปเบฎเบฑเบโเปเบซเปโเบเปเบฒเบโเบกเบตโเบเบฒเบโเบเบฐโเบกเบงเบโเบเบปเบโเบเปเปโเบเบงเบฒเบกโเบชเบฐโเบเบงเบโเปเบโเบเบฒเบโเบเปโเบฅเบดโเปเบเบโ. เบกเบฑเบเบเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบทเปเปเบงเปเบงเปเบฒเบเปเบฒเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบทเบเบเบฑเปเบเบเปเบฒเบขเบนเปเปเบเบเบธเปเบกเบเบญเบเบเปเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบเบฐเบเปเบญเบเบกเบตเบชเบดเบเบเบดเปเบเบเบฒเบเบเบฝเบเบซเบปเบงเบเปเปเปเบเบซเบเบถเปเบเบเบตเปเบเปเปเบกเบตเบเปเบฒเปเบฎเบ.
เบเปเบฒเบเบฑเบเบเบตเบเบฑเบเปเบเบเปเบฒเบเบเบฒเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบเบเบฒเบเบชเบปเปเบเปเบเบเบเบฐเปเบเบซเบผเบทเปเบซเบเบเบปเบเปเบเบเปเบฒเบเบเบนเปเบเบฐเบฅเบดเบเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเบฎเบฑเบเบชเบฒเบเบงเบฒเบกเบชเบญเบเบเปเบญเบเบเบญเบเบเปเปเบกเบนเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบดเบเบฑเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฐเบกเบฒเบเปเบงเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบฅเบฐเบเบปเบเบเปเบญเบเปเบชเป, เบเปเบฒเบเบชเบฒเบกเบฒเบ synchronize เบเบฑเบเบเบถเบเปเบ Kafka, เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เบเปเบงเบเบเบฑเบเบเบถเบเปเบเบเบฒเบเบเปเปเบกเบนเบ. เปเบเบทเปเบญเปเบเบตเบเปเบเปเบเบธเบฅเบฐเบเปเบฒเบเบฒเบเบชเบปเปเบเบเบฑเบเบเบนเปเบเบฐเบฅเบดเบ, เบกเบฑเบเบเปเบญเบเบกเบตเบเบงเบฒเบกเปเบเบฑเปเบกเบเบงเบเปเบฅเบฐเบเปเบฒเบเบปเบเปเบเบตเปเบกเปเบเบตเบก transactional.id. เบเปเบฒเบเบธเปเบก Kafka เบเบญเบเปเบเบปเปเบฒเบกเบตเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบตเปเบเบทเบเบเบฑเปเบเบเปเบฒ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฑเบเบเบถเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ, เปเบเบฑเปเบเบเบฑเบเบเบถเบ idempotent, เบเบฐเบเปเบญเบเบเบฒเบเบเบฒเบเบญเบฐเบเบธเบเบฒเบเบเบฒเบเบเบฝเบ, เปเบเบดเปเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเปเบเบเบซเบเปเบฒเบเบฒเบเปเบเบเปเบเปเบกเบนเบเบเปเบฒเบเบตเปเปเบเบฑเบเปเบงเปเปเบ transactional.id.
เบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบ, เบชเบฐเบเบฃเบดเบเปเบเบเบถเปเบ, เปเบเบฑเปเบเบเบทเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เบชเบฒเบกเบฒเบเปเบเปเปเบเบฑเบเบเบปเบงเบฅเบฐเบเบธเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบเป. เปเบเปเบเปเบฒเบเปเบฒเบเปเบเบตเบเบซเบผเบฒเบเปเบเบปเบงเบขเปเบฒเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฝเบงเบเบฑเบเบเบฑเบ transactional.id เบเบฝเบงเบเบฑเบ, เบเบปเบงเบขเปเบฒเบเบเบตเปเปเบเบตเบเบเบปเบงเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบฐเบเบทเบเบขเบธเบเปเบเบปเบฒเบเปเบงเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ, เปเบเบฒเบฐเบงเปเบฒ Kafka เบเบฐเบเบดเบเบฒเบฅเบฐเบเบฒเบกเบฑเบเปเบเบฑเบเบเบฐเบเบงเบเบเบฒเบ zombie.
org.apache.kafka.common.errors.ProducerFencedException: Producer attempted an operation with an old epoch. Either there is a newer producer with the same transactionalId, or the producer's transaction has been expired by the broker.
เปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป, เบเบงเบเปเบฎเบปเบฒเปเบเบตเปเบกเบเปเบฒเบเปเปเบเปเบฒเบเบเบฑเบเบเบทเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบฎเบนเบเปเบเบเบเบญเบ hostname, เปเบเบดเปเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฒเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก.
เบเบนเปเบเบฐเบฅเบดเบเบเบทเบเบเบฑเปเบเบเปเบฒ, เปเบเปเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบ Kafka เบเบฝเบเปเบเปเบเบงเบเบเบธเบกเบเบญเบเปเบเบเบเบญเบเบเปเปเบเบงเบฒเบก. เปเบเบเบเปเปเบชเบปเบเปเบฅเบทเปเบญเบเบเบญเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบธเบฅเบฐเบเปเบฒ, เบเปเปเบเบงเบฒเบกเบเบฑเบเบเบตเปเบเบซเบฒเบซเบปเบงเบเปเป, เปเบเปเบกเบตเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเบฅเบฐเบเบปเบเปเบเบตเปเบกเปเบเบตเบก.
เปเบเบทเปเบญเบเปเบญเบเบเบฑเบเบเปเปเปเบซเปเบเปเปเบเบงเบฒเบกเบเบฑเปเบเบเปเบฒเบงเบเบทเบเบญเปเบฒเบเปเบเบเบเบนเปเบเปเบฅเบดเปเบเบเบเปเบญเบเปเบงเบฅเบฒ, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฒเบเบปเบเบเบฒเบฅเบฒเบกเบดเปเบเบต isolation.level เบเปเบฒ read_committed. เบเบนเปเบเปเบฅเบดเปเบเบเบเบฑเปเบเบเปเบฒเบงเบเบฐเบชเบฒเบกเบฒเบเบญเปเบฒเบเบเปเปเบเบงเบฒเบกเบเบตเปเบเปเปเปเบกเปเบเบเบธเบฅเบฐเบเปเบฒเปเบเปเบเบทเบเบฑเบเบเปเบญเบ, เปเบฅเบฐเบเปเปเบเบงเบฒเบกเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฝเบเปเบเปเบซเบผเบฑเบเบเบฒเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒ.
เบเปเบฒเบเปเบฒเบเปเบเปเบเปเบฒเบเบปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฑเบเบซเบกเบปเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเบเปเบญเบเบซเบเปเบฒเบเบตเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเปเบเปเบเปเบฒเบเบปเบเบเบฒเบเบเบฑเบเบชเบปเปเบเบขเปเบฒเบเปเบเปเบเบญเบ. เบเบปเบกเปเบเบตเบ!
เปเบเปเบกเบตเบซเบเบถเปเบ nuance เบซเบผเบฒเบ. Transactional.id, เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเปเบงเปเบเปเบฒเบเปเบเบดเบ, เบเบปเบงเบเบดเบเปเบฅเปเบงเปเบกเปเบเบเปเบฒเบเปเบฒเบซเบเปเบฒเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ. เปเบเบเบปเบงเบเบฑเบเบเบฒเบเบเบธเบฅเบฐเบเปเบฒ, เบเบปเบงเปเบฅเบเบฅเปเบฒเบเบฑเบเบเบฐเบเบทเบเปเบเบตเปเบกเปเบชเปเบกเบฑเบ. เบเบปเบงเบฅเบฐเบเบธเบเบตเปเปเบเปเบฎเบฑเบเปเบกเปเบเบญเบญเบเปเบซเป transactional.id.expiration.ms, เปเบเบดเปเบเบเบทเบเบเบฑเปเบเบเปเบฒเบขเบนเปเปเบเบเบธเปเบก Kafka เปเบฅเบฐเบกเบตเบกเบนเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบ "7 เบกเบทเป". เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเปเบโเบฅเบฐโเบซเบงเปเบฒเบโเปเบงโเบฅเบฒโเบเบตเปโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบฑเบโเบเปเปโเปเบเปโเบฎเบฑเบโเบเปเปโเบเบงเบฒเบกโ, เบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบโ, เปเบโเปเบงโเบฅเบฒโเบเบตเปโเบเปเบฒเบโเบเบฐโเบเบฒโเบเบฒเบกโเบชเบปเปเบโเบเปเปโเปเบโเบเบตเปโเบเปเบฒเบโเบเบฐโเปเบเปโเบฎเบฑเบโ InvalidPidMappingException. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบนเปเบเบฐเบชเบฒเบเบเบฒเบเบเบธเบฅเบฐเบเปเบฒเบเบฐเบญเบญเบเปเบฅเบเบฅเปเบฒเบเบฑเบเปเบซเบกเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเปเปเปเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเปเบเบงเบฒเบกเบญเบฒเบเบเบฐเบชเบนเบเปเบชเบเบเปเบฒเบซเบฒเบเบงเปเบฒ InvalidPidMappingException เบเปเปเปเบเปเบเบทเบเบเบฑเบเบเบฒเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ.
เปเบเบเบเบตเปเบเบฐเบเบปเบเปเบเปเบฎเบฑเบ
เบเบฑเปเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเป, เบกเบฑเบเบเปเปเบเบฝเบเบเปเบเบตเปเบเบฐเบเบฝเบเปเบเปเบชเบปเปเบเบเปเปเบเบงเบฒเบกเปเบเบซเบฒ Kafka. เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบทเบญเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบญเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบฅเบฐเบเบฝเบกเบเปเบญเบกเบเบตเปเบเบฐเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบง. เปเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฐเบเบฒเบเบฒเบกเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบขเปเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบฑเบเบชเบปเปเบเบเบฑเปเบเบเบฝเบงเปเบฅเบฐเบญเบฐเบเบดเบเบฒเบเบเบฑเบเบซเบฒเบซเบผเบฒเบเบขเปเบฒเบเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒ client.id เปเบฅเบฐ transactional.id เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบปเบ. เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบกเปเบเบเบปเบเบชเบฐเบซเบผเบธเบเบเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบนเปเบเบฐเบฅเบดเบเปเบฅเบฐเบเบนเปเบเปเบฅเบดเปเบเบ.
เบเบนเปเบเบฐเบฅเบดเบ:
- acks = เบเบฑเบเบซเบกเบปเบ
- เบเบฐเบเบฒเบเบฒเบก > 0
- enable.idempotence = เบเบดเบ
- max.in.flight.requests.per.connection โค 5 (1 เบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบฒเบกเบฅเปเบฒเบเบฑเบ)
- transactional.id = ${application-name}-${hostname}
เบเบนเปเบเปเบฅเบดเปเบเบ:
- isolation.level = read_committed
เปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบญเบฐเบเบฒเบเบปเบ, เบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบ wrapper เบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบญเบเปเบเปเบฅเบเบฐเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบฎเบฝเบ spring, เบเปเบญเบเบเบตเปเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบตเปเปเบเปเบฅเบฐเบเบธเปเบงเปเปเบฅเปเบง.
เบเบตเปเปเบกเปเบเปเบญเบเบฐเบชเบฒเบเบชเบญเบเบชเบฒเบกเบขเปเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบถเบเบชเบฒเบเปเบงเบเบเบปเบเปเบญเบ:
KIP-98 - เปเบเปเบเบดเบเปเบฅเปเบงเปเบกเบทเปเบญเบเบฒเบเบเบฑเบเบชเบปเปเบเปเบฅเบฐเบเบฒเบเบชเบปเปเบเบเปเปเบเบงเบฒเบก เบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com