Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° Π·Π°Ρ‰ΠΎ Π² Авито ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ Kafka ΠΏΡ€Π΅Π΄ΠΈ Π΄Π΅Π²Π΅Ρ‚ мСсСца ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ прСдставлява тя. Π©Π΅ сподСля Π΅Π΄ΠΈΠ½ ΠΎΡ‚ случаитС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. И накрая Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ прСдимства ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Kafka as a Service.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

ΠŸΡŠΡ€Π²ΠΎ, ΠΌΠ°Π»ΠΊΠΎ контСкст. ΠŸΡ€Π΅Π΄ΠΈ извСстно Π²Ρ€Π΅ΠΌΠ΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° сС ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π°Π²Π°ΠΌΠ΅ ΠΎΡ‚ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² Авито Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ няколко стотици Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ услуги. Π’Π΅ ΠΈΠΌΠ°Ρ‚ свои Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, свой стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ отговарят Π·Π° своята част ΠΎΡ‚ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°.

Π•Π΄Π½Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с голям Π±Ρ€ΠΎΠΉ услуги Π΅ комуникацията. Услуга А чСсто иска информация, с която Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° услуга Π‘. Π’ Ρ‚ΠΎΠ·ΠΈ случай, услуга А сС ΠΎΠ±Ρ€ΡŠΡ‰Π° към услуга Π‘ Ρ‡Ρ€Π΅Π· синхронСн API. Услуга Π’ иска Π΄Π° Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠ²ΠΎ става с услугитС Π“ ΠΈ Π”, Π° Ρ‚Π΅, ΠΎΡ‚ своя страна, сС интСрСсуват ΠΎΡ‚ услугитС А ΠΈ Π‘. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π° β€žΠ»ΡŽΠ±ΠΎΠΏΠΈΡ‚Π½ΠΈβ€œ услуги станат ΠΌΠ½ΠΎΠ³ΠΎ, Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ тях сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°Ρ‚ Π² Π·Π°ΠΏΠ»Π΅Ρ‚Π΅Π½ ΠΊΠ»ΡƒΠ±ΠΎΠΊ.

Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, във всСки ΠΌΠΎΠΌΠ΅Π½Ρ‚ услуга А ΠΌΠΎΠΆΠ΅ Π΄Π° станС Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π°. Какво Π΄Π° ΠΏΡ€Π°Π²ΠΈ услуга Π‘ ΠΈ всички останали услуги, ΠΊΠΎΠΈΡ‚ΠΎ зависят ΠΎΡ‚ нСя? А Π°ΠΊΠΎ Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° бизнСс опСрация Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π²Π΅Ρ€ΠΈΠ³Π° ΠΎΡ‚ послСдоватСлни синхронни повиквания, вСроятността Π·Π° ΠΎΡ‚ΠΊΠ°Π· Π½Π° цялата опСрация става ΠΎΡ‰Π΅ ΠΏΠΎ-висока (ΠΈ тя Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-висока, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-дълга Π΅ Ρ‚Π°Π·ΠΈ Π²Π΅Ρ€ΠΈΠ³Π°).

Π˜Π·Π±ΠΎΡ€ Π½Π° тСхнология

Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

Π”ΠΎΠ±Ρ€Π΅, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ са ясни. МоТСм Π΄Π° Π³ΠΈ отстраним, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° систСма Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ услугитС. Π‘Π΅Π³Π° Π½Π° всяка услуга ѝ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° Π·Π½Π°Π΅ само Π·Π° Ρ‚Π°Π·ΠΈ систСма Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π’ допълнСниС, самата систСма трябва Π΄Π° бъдС отказоустойчива ΠΈ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π² случай Π½Π° Π°Π²Π°Ρ€ΠΈΠΈ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π° Π±ΡƒΡ„Π΅Ρ€ Π·Π° послСдваща ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ тСхнология, Π½Π° която Ρ‰Π΅ сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° доставката Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π—Π° Ρ‚ΠΎΠ²Π° ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΈ очаквания ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΡ‚ нСя:

  • ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ услугитС Π½Π΅ трябва Π΄Π° сС губят;
  • ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Π΄ΡƒΠ±Π»ΠΈΡ€Π°Ρ‚;
  • ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΈ Ρ‡Π΅Ρ‚Π°Ρ‚ Π·Π° Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π° ΠΎΡ‚ няколко Π΄Π½ΠΈ (постоянСн Π±ΡƒΡ„Π΅Ρ€);
  • услугитС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Π°Π±ΠΎΠ½ΠΈΡ€Π°Ρ‚ Π·Π° интСрСснитС ΠΈΠΌ Π΄Π°Π½Π½ΠΈ;
  • няколко услуги ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π΄Π°Π½Π½ΠΈ;
  • ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½, ΠΎΠ±Π΅ΠΌΠ΅Π½ payload (event-carried state transfer);
  • понякога Π΅ Π½ΡƒΠΆΠ½Π° гаранция Π·Π° Ρ€Π΅Π΄Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° бСшС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ максимално ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ° ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½Π° систСма с висока пропускна способност (Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 100k ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с Ρ€Π°Π·ΠΌΠ΅Ρ€ няколко ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π° Π½Π° сСкунда).

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ сС сбогувахмС с RabbitMQ (Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΅ Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ стабилна ΠΏΡ€ΠΈ високи rps), PGQ ΠΎΡ‚ SkyTools (Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΡŠΡ€Π· ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌ) ΠΈ NSQ (Π½Π΅ пСрсистСнтСн). Всички Ρ‚Π΅Π·ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² компанията Π½ΠΈ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π°Ρ‚ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π½ΠΎΠ²ΠΈ Π·Π° нас Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β€” Apache Kafka, Apache Pulsar ΠΈ NATS Streaming.

ΠŸΡŠΡ€Π²ΠΈ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΠΈΡ…ΠΌΠ΅ Pulsar. Π Π΅ΡˆΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ Kafka ΠΈ Pulsar са доста ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. И Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Pulsar Π΅ тСстван ΠΎΡ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΏΠΎ-Π½ΠΎΠ² Π΅ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΏΠΎ-ниска латСнтност (Π² тСория), Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ Π΄Π° оставим Kafka, ΠΊΠ°Ρ‚ΠΎ de facto стандарт Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. ВСроятно Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ към Apache Pulsar Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅.

И Ρ‚Π°ΠΊΠ°, останаха Π΄Π²Π°ΠΌΠ° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΈ: NATS Streaming ΠΈ Apache Kafka. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΡƒΡ‡ΠΈΡ…ΠΌΠ΅ ΠΈ Π΄Π²Π΅Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΈ ΠΈ Π΄Π²Π΅Ρ‚Π΅ отговарят Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°. Но Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка сС притСснихмС ΠΎΡ‚ относитСлната младост Π½Π° NATS Streaming (ΠΈ ΠΎΡ‚ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ основнитС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, Tyler Treat, Ρ€Π΅ΡˆΠΈ Π΄Π° напуснС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ свой собствСн β€” Liftbridge). Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ€Π΅ΠΆΠΈΠΌΡŠΡ‚ Π½Π° Clustering Π½Π° NATS Streaming Π½Π΅ позволявашС силно Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ (вСроятно Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ слСд добавянСто Π½Π° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅ ΠΏΡ€Π΅Π· 2017 Π³ΠΎΠ΄ΠΈΠ½Π°).

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, NATS Streaming Π΅ страхотна тСхнология, написана Π½Π° Go ΠΈ ΠΈΠΌΠ°Ρ‰Π° ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°Ρ‚Π° Π½Π° Cloud Native Computing Foundation. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Apache Kafka, тя Π½Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ Zookeeper Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° (възмоТно Π΅ скоро Π΄Π° сС ΠΊΠ°ΠΆΠ΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈ Π·Π° Kafka), Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° RAFT. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ NATS Streaming Π΅ ΠΏΠΎ-лСсСн Π·Π° администриранС. НС ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°ΠΌΠ΅, Ρ‡Π΅ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ ΠΎΡ‚Π½ΠΎΠ²ΠΎ към Ρ‚Π°Π·ΠΈ тСхнология.

И всС ΠΏΠ°ΠΊ, днСс Π½Π°ΡˆΠΈΡΡ‚ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π» стана Apache Kafka. Π’ Π½Π°ΡˆΠΈΡ‚Π΅ тСстовС тя ΠΏΠΎΠΊΠ°Π·Π° сСбС си ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΡŠΡ€Π·Π° (Π½Π°Π΄ Π΅Π΄ΠΈΠ½ ΠΌΠΈΠ»ΠΈΠΎΠ½ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² сСкунда Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΎΡ‚ 1 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚), Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π½Π°Π΄Π΅ΠΆΠ΄Π½Π°, Π΄ΠΎΠ±Ρ€Π΅ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° ΠΎΡ‚ ΠΎΠΏΠΈΡ‚ Π² продукцията ΠΎΡ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ОсвСн Ρ‚ΠΎΠ²Π°, Kafka ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΏΠΎΠ½Π΅ няколко Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ вСрсията Π½Π° Confluent), Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Kafka ΠΈΠΌΠ° Ρ€Π°Π·Π²ΠΈΡ‚Π° СкосистСма.

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Kafka

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ, Π²Π΅Π΄Π½Π°Π³Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π½Π° ΠΊΠ½ΠΈΠ³Π° β€” Β«Kafka: The Definitive GuideΒ» (ΠΈΠΌΠ° ΠΈ Π½Π° руски, Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ‚Π΅ ΠΌΠ°Π»ΠΊΠΎ Π±ΡŠΡ€ΠΊΠ°Ρ‚ мозъка). Π’ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ информация, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° основното Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Kafka ΠΈ Π΄ΠΎΡ€ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅. Π‘Π°ΠΌΠ°Ρ‚Π° докумСнтация ΠΎΡ‚ Apache ΠΈ Π±Π»ΠΎΠ³ΡŠΡ‚ Π½Π° Confluent ΡΡŠΡ‰ΠΎ са ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ написани ΠΈ лСсно Ρ‡Π΅Ρ‚ΠΈΠΌΠΈ.

И Ρ‚Π°ΠΊΠ°, Π½Π΅ΠΊΠ° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π½Π° Kafka ΠΎΡ‚ височина Π½Π° ΠΏΡ‚ΠΈΡ‡ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° топология Π½Π° Kafka сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ producer, consumer, broker ΠΈ zookeeper.

Π‘Ρ€ΠΎΠΊΠ΅Ρ€

Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

Π—Π°Π΄ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ отговаря Π±Ρ€ΠΎΠΊΠ΅Ρ€ΡŠΡ‚ (broker). Всички Π΄Π°Π½Π½ΠΈ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² Π±ΠΈΠ½Π°Ρ€Π΅Π½ Π²ΠΈΠ΄, Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€ΡŠΡ‚ Π·Π½Π°Π΅ ΠΌΠ°Π»ΠΊΠΎ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват Ρ‚Π΅ ΠΈ ΠΊΠ°ΠΊΠ²Π° Π΅ тяхната структура.

ВсСки Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ‚ΠΈΠΏ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС Π½Π°ΠΌΠΈΡ€Π° Π² своя собствСна Ρ‚Π΅ΠΌΠ° (topic). НапримСр, ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π·Π° създаванС Π½Π° обява ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π° Π² Ρ‚Π΅ΠΌΠ°Ρ‚Π° item.created, Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ β€” Π² item.changed. Π’Π΅ΠΌΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ класификатори Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. На Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, ΠΊΠ°Ρ‚ΠΎ:

  • ΠΎΠ±Π΅ΠΌ Π½Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΈ/ΠΈΠ»ΠΈ тСхният Π²ΡŠΠ·Ρ€Π°ΡΡ‚ (retention.bytes, retention.ms);
  • Ρ„Π°ΠΊΡ‚ΠΎΡ€ Π½Π° излишък Π½Π° Π΄Π°Π½Π½ΠΈ (replication factor);
  • максималСн Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π΅Π΄Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ (max.message.bytes);
  • ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ Π² Ρ‚Π΅ΠΌΠ°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Π·Π°ΠΏΠΈΡˆΠ°Ρ‚ Π΄Π°Π½Π½ΠΈ (min.insync.replicas);
  • Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° failover Π½Π° нСсинхронна изоставаща Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° с ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½Π° Π·Π°Π³ΡƒΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ (unclean.leader.election.enable);
  • ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ (https://kafka.apache.org/documentation/#topicconfigs).

ΠžΡ‚ своя страна, всяка Ρ‚Π΅ΠΌΠ° сС Ρ€Π°Π·Π±ΠΈΠ²Π° Π½Π° Π΅Π΄Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ (partition). ИмСнно Π² партицията Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π°. Ако Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Π±Ρ€ΠΎΠΊΠ΅Ρ€, ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ всички Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈ (Π΄ΠΎΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ възмоТно), ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° запис ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π² Π΅Π΄Π½Π° Ρ‚Π΅ΠΌΠ° Π½Π° няколко Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

На диска Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° всяка партиция сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ сСгмСнти, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ€Π°Π²Π½ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ (ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΎ Ρ‡Ρ€Π΅Π· log.segment.bytes). Π’Π°ΠΆΠ½Π° особСност β€” ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈΡ‚Π΅ (ΠΏΡ€ΠΈ задСйстванС Π½Π° retention) става ΠΈΠΌΠ΅Π½Π½ΠΎ Π² сСгмСнти (Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ Π΅Π΄Π½ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ ΠΎΡ‚ партицията, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ само цСлият сСгмСнт, ΠΈ Ρ‚ΠΎ само Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½).

Zookeeper

Zookeeper изпълнява ролята Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€. ИмСнно Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠ°ΠΆΠ΅ Π΄Π°Π»ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈΡ‚Π΅ са ΠΆΠΈΠ²ΠΈ (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π· zookeeper-shell с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ls /brokers/ids), ΠΊΠΎΠΉ ΠΎΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈΡ‚Π΅ Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΡŠΡ‚ (get /controller), Π΄Π°Π»ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈΡ‚Π΅ синхронизирано ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ със своитС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ (get /brokers/topics/topic_name/partitions/partition_number/state). Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ zookeeper ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ бъдС Π·Π°ΠΏΠΈΡ‚Π°Π½ ΠΎΡ‚ producer ΠΈ consumer, Π·Π° Π΄Π° ΡƒΠ·Π½Π°Π΅ Π½Π° ΠΊΠΎΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΊΠ°ΠΊΠ²ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚. Π’ случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π° Ρ‚Π΅ΠΌΠ° Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ replication factor, ΠΏΠΎ-голям ΠΎΡ‚ 1, zookeeper Ρ‰Π΅ посочи, ΠΊΠΎΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ са Π»ΠΈΠ΄Π΅Ρ€ΠΈ (Π² тях Ρ‰Π΅ сС записва ΠΈ ΠΎΡ‚ тях Ρ‰Π΅ сС Ρ‡Π΅Ρ‚Π΅). ΠŸΡ€ΠΈ ΠΏΠ°Π΄Π°Π½Π΅ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€, Ρ‚ΠΎΡ‡Π½ΠΎ Π² zookeeper Ρ‰Π΅ бъдС записана информация Π·Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Π»ΠΈΠ΄Π΅Ρ€-ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ (ΠΎΡ‚ вСрсия 1.1.0 асинхронно, ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ).

Π’ ΠΏΠΎ-старитС вСрсии Π½Π° Kafka zookeeper ΠΎΡ‚Π³ΠΎΠ²Π°Ρ€ΡΡˆΠ΅ ΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° офсСти, Π½ΠΎ сСга Ρ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² спСциална Ρ‚Π΅ΠΌΠ° __consumer_offsets Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ всС ΠΎΡ‰Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ zookeeper Π·Π° Ρ‚Π΅Π·ΠΈ Ρ†Π΅Π»ΠΈ).

Най-простият Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² Ρ‚ΠΈΠΊΠ²Π° Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° информация ΠΎΡ‚ zookeeper. Π’ Ρ‚Π°ΠΊΡŠΠ² сцСнарий Ρ‰Π΅ бъдС ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈ ΠΎΡ‚ΠΊΡŠΠ΄Π΅ Π΄Π° Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»

Producer β€” Ρ‚ΠΎΠ²Π° Π½Π°ΠΉ-чСсто Π΅ услуга, която Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° пряко записванС Π½Π° Π΄Π°Π½Π½ΠΈ Π² Apache Kafka. Producer ΠΈΠ·Π±ΠΈΡ€Π° Ρ‚Π΅ΠΌΠ°, Π² която Ρ‰Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° записва информация Π² нСя. НапримСр, producer ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС услуга Π·Π° обявлСния. Π’ Ρ‚Π°ΠΊΡŠΠ² случай Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π² Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΠΏΠΈΠΊΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΊΠ°Ρ‚ΠΎ β€žΠΎΠ±ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΎβ€œ, β€žΠΎΠ±ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ΠΎβ€œ, β€žΠΎΠ±ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΎβ€œ ΠΈ Ρ‚.Π½. Всяко ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π² Ρ‚ΠΎΠ·ΠΈ случай прСдставлява Π΄Π²ΠΎΠΉΠΊΠ° ΠΊΠ»ΡŽΡ‡-стойност.

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ всички ΡΡŠΠ±ΠΈΡ‚ΠΈΡ сС разпрСдСлят ΠΏΠΎ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° с round-robin, Π°ΠΊΠΎ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π½Π΅ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ (Π·Π°Π³ΡƒΠ±Π° Π½Π° подрСдСност), ΠΈ Ρ‡Ρ€Π΅Π· MurmurHash (ΠΊΠ»ΡŽΡ‡), Π°ΠΊΠΎ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° (подрСдСност Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½Π° партиция).

Π’ΡƒΠΊ Π²Π΅Π΄Π½Π°Π³Π° трябва Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈΠΌ, Ρ‡Π΅ Kafka Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° Ρ€Π΅Π΄Π° Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° само Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½Π° партиция. Но Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ‚ΠΎΠ²Π° чСсто Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Π΄Π° добавятС всички измСнСния Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ обявлСниС Π² Π΅Π΄Π½Π° партиция (ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π·Π°ΠΏΠ°Π·Π²Π°ΠΉΠΊΠΈ Ρ€Π΅Π΄Π° Π½Π° Ρ‚Π΅Π·ΠΈ измСнСния Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° обявлСниСто). ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΠΎΡ€Π΅Π΄Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ Π² Π΅Π΄Π½ΠΎ ΠΎΡ‚ ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ.

Consumer

Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

ΠšΠΎΠ½ΡΡƒΠΌΠΈΡ€Π°Ρ‰ΠΈΡΡ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Apache Kafka. Ако сС Π²ΡŠΡ€Π½Π΅ΠΌ към ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅, ΠΊΠΎΠ½ΡΡƒΠΌΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅Π½ ΡΡŠΡ€Π²ΠΈΡ. Π’ΠΎΠ·ΠΈ ΡΡŠΡ€Π²ΠΈΡ Ρ‰Π΅ сС Π°Π±ΠΎΠ½ΠΈΡ€Π° Π·Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π½Π° ΡΡŠΡ€Π²ΠΈΡΠ° Π·Π° обяви ΠΈ ΠΏΡ€ΠΈ появата Π½Π° Π½ΠΎΠ²Π° обява Ρ‰Π΅ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.

Apache Kafka ΠΏΠΎΠΌΠ½ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ послСдни ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΊΠΎΠ½ΡΡƒΠΌΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ (Π·Π° Ρ‚ΠΎΠ²Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° слуТСбната Ρ‚Π΅ΠΌΠ° __consumer__offsets), ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ ΠΊΠΎΠ½ΡΡƒΠΌΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° опцията enable.auto.commit = true ΠΈ напълно сС ΠΎΡ‚Π΄Π°Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ прослСдяванС Π½Π° позицията Π½Π° консуматора Π² Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π½Π° Kafka, ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π³ΡƒΠ±ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. Π’ производствСния ΠΊΠΎΠ΄ Π½Π°ΠΉ-чСсто позицията Π½Π° консуматора сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Ρ€ΡŠΡ‡Π½ΠΎ (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ управлява ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ трябва Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΠΊΠΎΠΌΠΈΡ‚ Π½Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅).

Π’ случаитС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ консуматор Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ ΠΎΡ‚ Π½ΠΎΠ²ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ голям), ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΎΡ‰Π΅ няколко консуматора, ΡΠ²ΡŠΡ€Π·Π²Π°ΠΉΠΊΠΈ Π³ΠΈ Π² консуматорска Π³Ρ€ΡƒΠΏΠ°. ΠšΠΎΠ½ΡΡƒΠΌΠ°Ρ‚ΠΎΡ€ΡΠΊΠ°Ρ‚Π° Π³Ρ€ΡƒΠΏΠ° логичСски прСдставлява Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡŠΠ² консуматор, Π½ΠΎ с Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ участницитС Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°. Π’ΠΎΠ²Π° позволява Π½Π° всСки ΠΎΡ‚ участницитС Π΄Π° Π²Π·Π΅ΠΌΠ΅ своя дял ΠΎΡ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° скоростта Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ тСстуванСто

Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

Π’ΡƒΠΊ няма Π΄Π° пиша ΠΌΠ½ΠΎΠ³ΠΎ пояснитСлСн тСкст, просто Ρ‰Π΅ сподСля ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ. ВСстовСтС бяха ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ Π½Π° 3 физичСски устройства (12 CPU, 384 GB RAM, 15k SAS DISK, 10 GBit/s НСт), Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈΡ‚Π΅ ΠΈ zookeeper бяха Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π² lxc.

ВСстванС Π½Π° производитСлността

Π’ Ρ…ΠΎΠ΄Π° Π½Π° тСстовСтС бяха ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ слСднитС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

  • Бкорост Π½Π° запис Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с Ρ€Π°Π·ΠΌΠ΅Ρ€ 1 KB Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ 9 ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Π° β€” 1,300,000 ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² сСкунда.
  • Бкорост Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с Ρ€Π°Π·ΠΌΠ΅Ρ€ 1 KB Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ 9 консуматора β€” 1,500,000 ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² сСкунда.

ВСст Π½Π° устойчивостта

Π’ Ρ…ΠΎΠ΄Π° Π½Π° тСстовСтС бяха ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ слСднитС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ (3 Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, 3 zookeeper).

  • НСочакваното прСкратяванС Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ спиранС ΠΈΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π½Π° кластСра. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π² Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ, Π½ΠΎ Π½Π° останалитС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈ ΠΏΠ°Π΄Π° ΠΏΠΎ-голямо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅.
  • НСочаквано ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΄Π²Π°ΠΌΠ° Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈ Π² случай Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΎΡ‚ Ρ‚Ρ€ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈ min.isr = 2 Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π·Π° запис, Π½ΠΎ остава Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅. Π’ случай, Ρ‡Π΅ min.isr = 1, ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΡŠΡ‚ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° запис. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈ Π½Π° изискванСто Π·Π° висока бСзопасност Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅.
  • НСочаквано ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ Π½Π° Zookeeper Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ спиранС ΠΈΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π² Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ.
  • НСочаквано ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΄Π²Π°ΠΌΠ° ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° Zookeeper Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ Π½Π° Zookeeper. Π’ΠΎΠ²Π° изявлСниС Π΅ вярно Π·Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° Zookeeper с 3 ΡΡŠΡ€Π²ΡŠΡ€Π°. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° изслСдванията бСшС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΡŠΡ‚ Π½Π° Zookeeper Π΄ΠΎ 5 ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° отказоустойчивостта.

Kafka ΠΊΠ°Ρ‚ΠΎ услуга

Kafka ΠΈ микросСрвизи: ΠΎΠ±Π·ΠΎΡ€

Π£Π±Π΅Π΄ΠΈΡ…ΠΌΠ΅ сС, Ρ‡Π΅ Kafka Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π½Π° тСхнология, която Ρ€Π΅ΡˆΠ°Π²Π° поставСната ΠΏΡ€Π΅Π΄ нас Π·Π°Π΄Π°Ρ‡Π° (рСализация Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ). Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Π·Π°Π±Ρ€Π°Π½ΠΈΠΌ Π½Π° услугитС Π΄Π° сС ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към Kafka ΠΈ я Π·Π°Ρ‚Π²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ ΠΎΡ‚Π³ΠΎΡ€Π΅ с услугата data-bus. Π—Π°Ρ‰ΠΎ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅? Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΈΠΌΠ° няколко ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ.

  • Data-bus ΠΏΠΎΠ΅ всички Π·Π°Π΄Π°Ρ‡ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с интСграцията с Kafka (рСализация ΠΈ настройка Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, извСстяванС, Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅, ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‚.Π½.). Π’Π°ΠΊΠ° интСграцията с Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° максимално лСсно.

  • Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° сС абстрахирамС ΠΎΡ‚ конкрСтния Π΅Π·ΠΈΠΊ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Kafka.

  • Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ услуги Π΄Π° сС абстрахират ΠΎΡ‚ слоя Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. МоТС Π±ΠΈ Π² някакъв ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‰Π΅ смСним Kafka с Pulsar, ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½ΠΈΠΊΠΎΠΉ няма Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ (всички услуги знаят само Π·Π° API Π½Π° data-bus).

  • Data-bus ΠΏΠΎΠ΅ Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° схСмитС Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π°.

  • Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° data-bus бСшС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° аутСнтификация.

  • Под ΠΏΡ€ΠΈΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° data-bus ΠΌΠΎΠΆΠ΅ΠΌ Π±Π΅Π· Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌ, нСзабСлязано Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ вСрсиитС Π½Π° Kafka, Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Π΄Π° управлявамС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈΡ‚Π΅ ΠΈ Ρ‚.Π½.

  • Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ добавянСто Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ липсват Π² Kafka (ΠΊΠ°Ρ‚ΠΎ ΠΎΠ΄ΠΈΡ‚ Π½Π° Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈΡ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, създаванС Π½Π° DLQ ΠΈ Ρ‚.Π½.).

  • Data-bus позволява Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° failover Π·Π° всички услуги.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ ΠΌΠ°Π»ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π² ΠΊΠΎΠ΄Π° Π½Π° услугата си. Π’ΠΎΠ²Π° Π΅ всичко. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅, Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Ρ‚Π΅ с Π΅Π΄Π½Π° Ρ€Π΅Π΄ ΠΊΠΎΠ΄. Цялата рСализация Π΅ скрита ΠΎΡ‚ вас, навън ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ само няколко Ρ€ΡŠΡ‡ΠΊΠΈ, Ρ‚ΠΈΠΏ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Под ΠΊΠ°ΠΏΠ°ΠΊΠ° услугата data-bus стартира Π² Kubernetes нСобходимия Π±Ρ€ΠΎΠΉ инстанции Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΠΈΠΌ прСдоставя Π½ΡƒΠΆΠ½Π°Ρ‚Π° конфигурация, Π½ΠΎ всичко Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° услуга.

Π Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΡΡ€Π΅Π±ΡŠΡ€Π½Π° ΠΊΡƒΡ€ΡˆΡƒΠΌΠ°, ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ° свои ограничСния.

  • Data-bus трябва Π΄Π° сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΎΡ‚ вас, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Π²ΡŠΠ½ΡˆΠ½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • Data-bus ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° броя Π½Π° взаимодСйствията ΠΌΠ΅ΠΆΠ΄Ρƒ услугитС ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ намаляванС Π½Π° производитСлността Π² сравнСниС с чиста Kafka.
  • НС всичко ΠΌΠΎΠΆΠ΅ Ρ‚Π°ΠΊΠ° лСсно Π΄Π° сС скриС ΠΎΡ‚ услугитС, Π½Π΅ Π½ΠΈ сС иска Π΄Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°ΠΌΠ΅ функционалността Π½Π° KSQL ΠΈΠ»ΠΈ Kafka Streams Π² data-bus, Π·Π°Ρ‚ΠΎΠ²Π° понякога сС Π½Π°Π»Π°Π³Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Π½Π° услугитС Π΄Π° взаимодСйстват Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ.

Π’ нашия случай прСдимствата Π½Π°Π΄Π²ΠΈΡ…Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈΡ‚Π΅, ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° скриСм Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π°Π΄ ΠΎΡ‚Π΄Π΅Π»Π½Π° услуга сС ΠΎΠΏΡ€Π°Π²Π΄Π°. ΠŸΡ€Π΅Π· Π³ΠΎΠ΄ΠΈΠ½Π°Ρ‚Π° Π½Π° Сксплоатация Π½Π΅ смС ΠΈΠΌΠ°Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ сСриозни ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

P.S. Благодаря Π½Π° приятСлката ΠΌΠΈ, Π•ΠΊΠ°Ρ‚Π΅Ρ€ΠΈΠ½Π° ОбаляСва, Π·Π° страхотнитС ΠΈΠ»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ към Ρ‚Π°Π·ΠΈ статия. Ако Π²ΠΈ харСсват, Ρ‚ΡƒΠΊ Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈΠ»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster