Како ΠšΠ°Ρ„ΠΊΠ° стана рСалност

Како ΠšΠ°Ρ„ΠΊΠ° стана рСалност

Π•Ρ˜ Π₯Π°Π±Ρ€!

Π Π°Π±ΠΎΡ‚Π°ΠΌ Π²ΠΎ Ρ‚ΠΈΠΌΠΎΡ‚ Π½Π° Π’ΠΈΠ½ΠΊΠΎΡ„, кој Ρ€Π°Π·Π²ΠΈΠ²Π° сопствСн Ρ†Π΅Π½Ρ‚Π°Ρ€ Π·Π° ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ°. Јас Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ сС Ρ€Π°Π·Π²ΠΈΠ²Π°ΠΌ Π²ΠΎ Java ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Spring boot ΠΈ Ρ€Π΅ΡˆΠ°Π²Π°ΠΌ Ρ€Π°Π·Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΡˆΡ‚ΠΎ сС ΠΏΠΎΡ˜Π°Π²ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ Π΅Π΄Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

ΠŸΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ ΠΎΠ΄ Π½Π°ΡˆΠΈΡ‚Π΅ микроуслуги ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π½ΠΈ со Π΄Ρ€ΡƒΠ³ΠΈ асинхроно ΠΏΡ€Π΅ΠΊΡƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π·Π° ΠΏΠΎΡ€Π°ΠΊΠΈ. ΠŸΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ, ΠΊΠ°ΠΊΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π³ΠΎ користСвмС IBM MQ, кој повСќС Π½Π΅ моТСшС Π΄Π° сС носи со Ρ‚ΠΎΠ²Π°Ρ€ΠΎΡ‚, Π½ΠΎ истоврСмСно имашС високи Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° испорака.

Како Π·Π°ΠΌΠ΅Π½Π°, Π½ΠΈ бСшС ΠΏΠΎΠ½ΡƒΠ΄Π΅Π½ Apache Kafka, кој ΠΈΠΌΠ° висок ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π» Π·Π° ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅, Π½ΠΎ, Π·Π° ΠΆΠ°Π», Π±Π°Ρ€Π° рСчиси ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π΅Π½ пристап ΠΊΠΎΠ½ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡ˜Π°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΡ‚ Π·Π° испорака Π±Π°Ρ€Π΅ΠΌ Сднаш ΡˆΡ‚ΠΎ стандардно Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ ΠšΠ°Ρ„ΠΊΠ° Π½Π΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π°ΡˆΠ΅ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° конзистСнтност Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π°. Π‘Π»Π΅Π΄Π½ΠΎ, ќС Π³ΠΎ сподСлам Π½Π°ΡˆΠ΅Ρ‚ΠΎ искуство Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠšΠ°Ρ„ΠΊΠ°, особСно, ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΈ ΠΆΠΈΠ²Π΅Π΅Ρ‚Π΅ со Ρ‚ΠΎΡ‡Π½ΠΎ Сднаш испорака.

Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° испорака ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ повСќС

ΠŸΠΎΡΡ‚Π°Π²ΠΊΠΈΡ‚Π΅ дискутирани ΠΏΠΎΠ΄ΠΎΠ»Ρƒ ќС ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π΄Π° сС спрСчат Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со стандарднитС поставки Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅. Но, ΠΏΡ€Π²ΠΎ Π±ΠΈ сакал Π΄Π° ΠΎΠ±Ρ€Π½Π°ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΡˆΡ‚ΠΎ ќС Π³ΠΎ олСсни ΠΌΠΎΠΆΠ½ΠΎΡ‚ΠΎ Π΄Π΅Π±Π°Π³ΠΈΡ€Π°ΡšΠ΅.

Ова ќС ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚.ΠΈΠ΄ Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π» ΠΈ ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡. На ΠΏΡ€Π² ΠΏΠΎΠ³Π»Π΅Π΄, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ користитС ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠ°ΠΊΠΎ врСдност, ΠΈ Π²ΠΎ ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ случаи Ρ‚ΠΎΠ° ќС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°. Иако ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠΎΠ³Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° користи Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΈ, Π° Π²ΠΈΠ΅ ΠΈΠΌ Π³ΠΎ Π΄Π°Π²Π°Ρ‚Π΅ истиот 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 Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со ΠšΠ°Ρ„ΠΊΠ°, Ρ‚ΠΎΠ³Π°Ρˆ ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π—Π° овој ΡΠ»ΡƒΡ‡Π°Ρ˜, Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€ΠΎ Π΅ Π΄Π° сС користи ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜Π° ΠΎΠ΄ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° ΠΊΠ°ΠΊΠΎ врСдност client.id. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ Π½Π°ΡˆΠ°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ Π²ΠΎ ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΊΠ°Ρ„ΠΊΠ°-ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠΈ-Π³Ρ€ΡƒΠΏΠΈ ΠΎΠ΄ ΠΊΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈΡ‚Π΅ услуги ΠΎΠ΄ Confluent:

Како ΠšΠ°Ρ„ΠΊΠ° стана рСалност

Π‘Π΅Π³Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ сцСнариото Π·Π° Π·Π°Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° испорака Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈ. Kafka Producer ΠΈΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΊΡƒΡ€ΠΎΠ²ΠΈ, ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎ ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΈΠ·Π½Π°Π²Π°ΡšΠ° Π½Π° Π²ΠΎΠ΄Π°Ρ‡ΠΎΡ‚ Π½Π° кластСрот ΠΌΡƒ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ Π·Π° Π΄Π° ја Ρ€Π°Π·Π³Π»Π΅Π΄Π° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ напишана. Овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π·Π΅ΠΌΠ΅ слСднитС врСдности:

  • 0 β€” ΠΏΡ€ΠΈΠ·Π½Π°Π²Π° Π½Π΅ΠΌΠ° Π΄Π° сС смСта.
  • 1 Π΅ стандардниот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π΅ само 1 Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π·Π° Π΄Π° сС ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈ.
  • βˆ’1 β€” ΠŸΠΎΡ‚Ρ€Π΅Π±Π½Π° Π΅ ΠΏΠΎΡ‚Π²Ρ€Π΄Π° ΠΎΠ΄ ситС синхронизирани Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ (ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° кластСрот min.insync.Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ).

Од Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡ‚Π΅ врСдности Π΅ јасно Π΄Π΅ΠΊΠ° Π°ΠΊΡ‚ΠΈΡ‚Π΅ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Π½Π° -1 Π΄Π°Π²Π°Π°Ρ‚ најсилна Π³Π°Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π΄Π΅ΠΊΠ° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π½Π΅ΠΌΠ° Π΄Π° сС ΠΈΠ·Π³ΡƒΠ±ΠΈ.

Како ΡˆΡ‚ΠΎ ситС Π·Π½Π°Π΅ΠΌΠ΅, дистрибуиранитС систСми сС нСсигурни. Π—Π° Π·Π°ΡˆΡ‚ΠΈΡ‚Π° ΠΎΠ΄ ΠΌΠΈΠ½Π»ΠΈΠ²ΠΈ Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈ, Kafka Producer ја ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΎ поставитС Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° ΠΎΠ±ΠΈΠ΄ΠΈ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ испорака.Π²Ρ€Π΅ΠΌΠ΅.мс. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΡšΠ° ΠΈΠΌΠ° стандардна врСдност ΠΎΠ΄ Integer.MAX_VALUE (2147483647), Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΡšΠ° Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ со ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ само delivery.timeout.ms.

Π‘Π΅ Π΄Π²ΠΈΠΆΠΈΠΌΠ΅ ΠΊΠΎΠ½ Ρ‚ΠΎΡ‡Π½ΠΎ Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Π° испорака

НавСдСнитС поставки ΠΌΡƒ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Π°Ρ‚ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π» Π΄Π° испорачува ΠΏΠΎΡ€Π°ΠΊΠΈ со висока Π³Π°Ρ€Π°Π½Ρ†ΠΈΡ˜Π°. АјдС сСга Π΄Π° Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° сС осигурамС Π΄Π΅ΠΊΠ° само Π΅Π΄Π½Π° копија ΠΎΠ΄ ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π΅ напишана Π½Π° Ρ‚Π΅ΠΌΠ° Π½Π° ΠšΠ°Ρ„ΠΊΠ°? Π’ΠΎ Π½Π°Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π΅Π½ ΡΠ»ΡƒΡ‡Π°Ρ˜, Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ поставитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ Π½Π° ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π» ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ.ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π° Π΄ΠΎ вистина. Π˜Π΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° Π΄Π΅ΠΊΠ° само Π΅Π΄Π½Π° ΠΏΠΎΡ€Π°ΠΊΠ° Π΅ напишана Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π° Π½Π° Π΅Π΄Π½Π° Ρ‚Π΅ΠΌΠ°. ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ² Π·Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π° сС врСдноститС acks = ситС, ΠΎΠ±ΠΈΠ΄Π΅Ρ‚Π΅ сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ > 0, max.in.flight.requests.per.connection ≀ 5. Ако ΠΎΠ²ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π΅ сС Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΎΡ‚, Π³ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡ‚Π΅ врСдности ќС сС постават автоматски.

Кога Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°, Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° сС осигурамС Π΄Π΅ΠΊΠ° иститС ΠΏΠΎΡ€Π°ΠΊΠΈ Π·Π°Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ иститС ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ сСкој ΠΏΠ°Ρ‚. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ со ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠ»ΡƒΡ‡ΠΎΡ‚ partitioner.class ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ Π½Π° Producer. Π”Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅ со ΠΊΠ»ΡƒΡ‡ΠΎΡ‚. ΠœΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ исто Π·Π° сСкој поднСсок. Ова лСсно ΠΌΠΎΠΆΠ΅ Π΄Π° сС постигнС со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° кој Π±ΠΈΠ»ΠΎ ΠΎΠ΄ Π΄Π΅Π»ΠΎΠ²Π½ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ ΠΎΠ΄ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° објава. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ partitioner.class ΠΈΠΌΠ° стандардна врСдност βˆ’ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π΅Π½ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½Π΅Ρ€. Π‘ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡ˜Π° Π·Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π°ΡšΠ΅, стандардно постапувамС Π²Π°ΠΊΠ°:

  • Ако ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° Π΅ Сксплицитно Π½Π°Π²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΈ ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ Π½Π° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Ρˆ ја користимС.
  • Ако ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ Π΅ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π°, Π½ΠΎ ΠΊΠ»ΡƒΡ‡ΠΎΡ‚ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ја ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° спорСд Ρ…Π°ΡˆΠΎΡ‚ Π½Π° ΠΊΠ»ΡƒΡ‡ΠΎΡ‚.
  • Ако ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ ΠΊΠ»ΡƒΡ‡ΠΎΡ‚ Π½Π΅ сС Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π³ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π΅Π΄Π½Π° ΠΏΠΎ Π΅Π΄Π½Π° (round-robin).

Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΊΠ»ΡƒΡ‡ ΠΈ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎ ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ max.in.flight.requests.per.connection = 1 Π²ΠΈ Π΄Π°Π²Π° Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΎΡ‚. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, Π²Ρ€Π΅Π΄ΠΈ Π΄Π° сС Π·Π°ΠΏΠ°ΠΌΠ΅Ρ‚ΠΈ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°Ρ‚Π° Π½Π° пристап Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ кластСр, Ρ‚ΠΎΠ³Π°Ρˆ ќС Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ ΠΏΡ€Π°Π²Π° Π·Π° ΠΈΠ΄Π΅ΠΌΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ‚Π΅ΠΌΠ°.

Ако одСднаш Π²ΠΈ нСдостигаат моТности Π·Π° ΠΈΠ΄Π΅ΠΌΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎ ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ со ΠΊΠ»ΡƒΡ‡ ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° страната Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΎΡ‚ Π±Π°Ρ€Π° ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° конзистСнтноста Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ трансакциитС ќС Π΄ΠΎΡ˜Π΄Π°Ρ‚ Π½Π° помош. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π²Π΅Ρ€ΠΈΠΆΠ½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ условно Π΄Π° синхронизиратС запис Π²ΠΎ ΠšΠ°Ρ„ΠΊΠ°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, со запис Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π—Π° Π΄Π° сС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ трансакциско ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ Π΄ΠΎ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΎΡ‚, Ρ‚ΠΎΡ˜ ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ нСмоќСн ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ поставСн трансакциска.ΠΈΠ΄. Ако Π²Π°ΡˆΠΈΠΎΡ‚ кластСр ΠšΠ°Ρ„ΠΊΠ° ΠΈΠΌΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° пристап, Ρ‚ΠΎΠ³Π°Ρˆ трансакцискиот запис, ΠΊΠ°ΠΊΠΎ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΈΠΎΡ‚ запис, ќС ΠΈΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΎΠ΄ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅, ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ΄Π΅Π»Π°Ρ‚ со маска ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја врСдноста Π·Π°Ρ‡ΡƒΠ²Π°Π½Π° Π²ΠΎ transaksional.id.

Π€ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ, сСкоја Π½ΠΈΠ·Π°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи ΠΊΠ°ΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°. Но, Π°ΠΊΠΎ стартуватС Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ ΠΎΠ΄ иста Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со истиот трансакциски.ΠΈΠ΄, Ρ‚ΠΎΠ³Π°Ρˆ ΠΏΡ€Π²ΠΈΠΎΡ‚ стартуван ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ќС Π±ΠΈΠ΄Π΅ Π·Π°ΠΏΡ€Π΅Π½ со Π³Ρ€Π΅ΡˆΠΊΠ°, бидСјќи ΠšΠ°Ρ„ΠΊΠ° ќС Π³ΠΎ смСта Π·Π° процСс Π½Π° Π·ΠΎΠΌΠ±ΠΈ.

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.

Π—Π° Π΄Π° Π³ΠΎ Ρ€Π΅ΡˆΠΈΠΌΠ΅ овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π΄ΠΎΠ΄Π°Π²Π°ΠΌΠ΅ суфикс Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚, ΡˆΡ‚ΠΎ Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΎΠ΄ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π°.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΎΡ‚ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½, Π½ΠΎ трансакциитС Π½Π° ΠšΠ°Ρ„ΠΊΠ° Π³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π°Ρ‚ само опсСгот Π½Π° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π°. Π‘Π΅Π· ΠΎΠ³Π»Π΅Π΄ Π½Π° статусот Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°, ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° вСднаш ΠΎΠ΄ΠΈ Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π°, Π½ΠΎ ΠΈΠΌΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ систСмски Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ.

Π—Π° Π΄Π° спрСчи Ρ‚Π°ΠΊΠ²ΠΈΡ‚Π΅ ΠΏΠΎΡ€Π°ΠΊΠΈ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈ ΠΎΠ΄ страна Π½Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΎΡ‚ ΠΏΡ€Π΅Π΄ Π²Ρ€Π΅ΠΌΠ΅, Ρ‚ΠΎΡ˜ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ постави ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ ΠΈΠ·ΠΎΠ»Π°Ρ†ΠΈΡ˜Π°.Π½ΠΈΠ²ΠΎ Π΄ΠΎ read_committed врСдност. Π’Π°ΠΊΠ²ΠΈΠΎΡ‚ ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ ќС ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ‡ΠΈΡ‚Π° нСтрансакциски ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΊΠ°ΠΊΠΎ досСга, Π° трансакцискитС ΠΏΠΎΡ€Π°ΠΊΠΈ само ΠΏΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅.
Ако стС Π³ΠΈ поставилС ситС поставки Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ, Ρ‚ΠΎΠ³Π°Ρˆ стС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π»Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Сднаш испорака. БСкоја чСст!

Но, ΠΈΠΌΠ° ΡƒΡˆΡ‚Π΅ Π΅Π΄Π½Π° нијанса. Transaction.id, кој Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π²ΠΌΠ΅ ΠΏΠΎΠ³ΠΎΡ€Π΅, Π΅ Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ прСфиксот Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°. На ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΎΡ‚ Π½Π° трансакции, Π½Π° Π½Π΅Π³ΠΎ сС Π΄ΠΎΠ΄Π°Π²Π° сСквСнционСн Π±Ρ€ΠΎΡ˜. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сС ΠΈΠ·Π΄Π°Π²Π° Π½Π° трансакциска.ΠΈΠ΄.истСк.ms, кој Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Π½Π° кластСрот ΠšΠ°Ρ„ΠΊΠ° ΠΈ ΠΈΠΌΠ° стандардна врСдност ΠΎΠ΄ β€ž7 Π΄Π΅Π½Π°β€œ. Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ Π²ΠΎ ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ ΠΏΡ€ΠΈΠΌΠΈΠ»Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΠΎΡ€Π°ΠΊΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ ΠΊΠΎΠ³Π° ќС сС ΠΎΠ±ΠΈΠ΄Π΅Ρ‚Π΅ со слСдното трансакциско ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ ќС Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ InvalidPidMappingException. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΡ‚ΠΎΠ° ќС ΠΈΠ·Π΄Π°Π΄Π΅ Π½ΠΎΠ² сСквСнционСн Π±Ρ€ΠΎΡ˜ Π·Π° слСдната Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°. Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π³ΡƒΠ±ΠΈ Π°ΠΊΠΎ Π½Π΅ сС постапува ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ со InvalidPidMappingException.

НамСсто Ρ‚ΠΎΡ‚Π°Π»ΠΈ

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π½Π΅ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ само Π΄Π° ΠΌΡƒ ΠΈΡΠΏΡ€Π°ΡœΠ°Ρ‚Π΅ ΠΏΠΎΡ€Π°ΠΊΠΈ Π½Π° ΠšΠ°Ρ„ΠΊΠ°. Π’Ρ€Π΅Π±Π° Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜Π° ΠΎΠ΄ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ Π΄Π° Π±ΠΈΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π±Ρ€Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, сС ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π΅Ρ‚Π°Π»Π½ΠΎ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°ΠΌ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Сднаш Π·Π° испорака ΠΈ опишав Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° client.id ΠΈ трансакциска.id Π½Π° ΠΊΠΎΠΈ Π½Π°ΠΈΠ΄ΠΎΠ²ΠΌΠ΅. ΠŸΠΎΠ΄ΠΎΠ»Ρƒ Π΅ Ρ€Π΅Π·ΠΈΠΌΠ΅ Π½Π° поставкитС Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π» ΠΈ ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡.

ΠŸΡ€ΠΎΠ΄ΡƒΡ†Π΅Π½Ρ‚:

  1. акс = ситС
  2. сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π° > 0
  3. ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ.ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π° = Ρ‚ΠΎΡ‡Π½ΠΎ
  4. max.in.flight. requests.per.connection ≀ 5 (1 Π·Π° ΡƒΡ€Π΅Π΄Π½ΠΎ ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅)
  5. transactional.id = ${application-name}-${hostname}

ΠŸΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡:

  1. ΠΈΠ·ΠΎΠ»Π°Ρ†ΠΈΡ˜Π°.Π½ΠΈΠ²ΠΎ = read_committed

Π—Π° Π΄Π° Π³ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ Π²ΠΎ ΠΈΠ΄Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€Π°Π²ΠΈΠ²ΠΌΠ΅ сопствСн ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΏΡ€Π΅ΠΊΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΡƒΠΆΠΈΠ½Π°Ρ‚Π°, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ врСдноститС Π·Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ сС вСќС поставСни.

Π•Π²Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈ Π·Π° ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡ˜Π½ΠΎ ΡƒΡ‡Π΅ΡšΠ΅:

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€