เบงเบดเบ—เบตเบเบฒเบ™ Kafka เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡

เบงเบดเบ—เบตเบเบฒเบ™ Kafka เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡

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 เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบฎเบฑเบšเบ›เบฐเบเบฑเบ™. 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 เบกเบตเบกเบนเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ โˆ’ DefaultPartitioner. เบ”เป‰เบงเบเบเบปเบ™เบฅเบฐเบเบธเบ”เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบ™เบตเป‰, เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เปเบšเบšเบ™เบตเป‰:

  • เบ–เป‰เบฒเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบ–เบทเบเบฅเบฐเบšเบธเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™เป€เบงเบฅเบฒเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบกเบฑเบ™.
  • เบ–เป‰เบฒเบเบฒเบ™เปเบšเปˆเบ‡เบžเบฒเบ•เบดเบŠเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธ, เปเบ•เปˆเบเบฐเปเบˆเบ–เบทเบเบฅเบฐเบšเบธ, เป€เบฅเบทเบญเบเบžเบฒเบ—เบดเบŠเบฑเบ™เป‚เบ”เบ 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 เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบš. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบšเบปเบ”เบชเบฐเบซเบผเบธเบšเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบœเบนเป‰เบœเบฐเบฅเบดเบ”เปเบฅเบฐเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบ.

เบœเบนเป‰เบœเบฐเบฅเบดเบ”:

  1. acks = เบ—เบฑเบ‡เบซเบกเบปเบ”
  2. เบžเบฐเบเบฒเบเบฒเบก > 0
  3. enable.idempotence = เบˆเบดเบ‡
  4. max.in.flight.requests.per.connection โ‰ค 5 (1 เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš)
  5. transactional.id = ${application-name}-${hostname}

เบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบ:

  1. isolation.level = read_committed

เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ” wrapper เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบฒเบเบฎเบฝเบ™ spring, เบšเปˆเบญเบ™เบ—เบตเปˆเบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เปเบฅเป‰เบง.

เบ™เบตเป‰เปเบกเปˆเบ™เป€เบญเบเบฐเบชเบฒเบ™เบชเบญเบ‡เบชเบฒเบกเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบถเบเบชเบฒเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™