Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅" Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅, Π₯Π°Π±Ρ€ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ! Π’Π°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π° Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π½Π° Π·Π° всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ иска Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π·Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΎ ΠΈΠ·ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Kafka ΠΈ Kafka Streams. Π‘Π΅ΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΈ самата Ρ€Π°ΠΌΠΊΠ° Kafka, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ: Π°Π· Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½ΡƒΠΆΠ½ΠΎ. ΠžΠΏΠΈΡ‚Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° Kafka, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½ΠΎΠ²Π°Ρ†ΠΈΡ‚Π΅, Ρ‰Π΅ усвоят ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° интСрСсни прилоТСния Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Kafka Streams, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π°. Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ с ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΈ Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΎ Π½ΠΈΠ²ΠΎ, Π²Π΅Ρ‡Π΅ свикнали с понятиСто сСриализация, Ρ‰Π΅ Π½Π°ΡƒΡ‡Π°Ρ‚ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ умСнията си Π·Π° създаванС Π½Π° прилоТСния Kafka Streams. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π½Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° Π΅ написан Π½Π° Java 8 ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° синтаксиса Π½Π° лямбда-ΠΈΠ·Ρ€Π°Π·ΠΈ Π½Π° Java 8, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΡƒΠΌΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π΄ΠΎΡ€ΠΈ ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅) Ρ‰Π΅ Π²ΠΈ бъдС ΠΎΡ‚ ΠΏΠΎΠ»Π·Π°.

ΠžΡ‚ΠΊΡŠΡ. 5.3. АгрСгиранС ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

Π’ Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към ΠΈΠ·ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-ΠΎΠ±Π΅Ρ‰Π°Π²Π°Ρ‰ΠΈΡ‚Π΅ части Π½Π° Kafka Streams. ДосСга Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ слСднитС аспСкти Π½Π° Kafka Streams:

  • създаванС Π½Π° топология Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°;
  • ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΈ прилоТСния;
  • изпълнСниС Π½Π° съСдинСния Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π΄Π°Π½Π½ΠΈ;
  • Ρ€Π°Π·Π»ΠΈΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ (KStream) ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (KTable).

Π’ слСдващитС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Ρ‰Π΅ ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ всички Ρ‚Π΅Π·ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ с ΠΎΠΊΠΎΠ½Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ β€” ΠΎΡ‰Π΅ Π΅Π΄Π½Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅Π»Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΈ прилоТСния. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ бъдС просто Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅.

5.3.1. АгрСгиранС Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈΡ‚Π΅ Π½Π° Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ сСктори Π½Π° индустрията

АгрСгиранСто ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ са ΠΆΠΈΠ·Π½Π΅Π½ΠΎΠ²Π°ΠΆΠ½ΠΈ инструмСнти ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ. Π˜Π·ΡΠ»Π΅Π΄Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΈ записки Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ чСсто сС ΠΎΠΊΠ°Π·Π²Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ. Π—Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация ΠΎΡ‚ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ тяхното Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅.

Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ Π²Π»Π΅Π·Π΅Ρ‚Π΅ Π² ролята Π½Π° Π΄Π½Π΅Π²Π΅Π½ Ρ‚Ρ€Π΅ΠΉΠ΄ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° слСди ΠΎΠ±Π΅ΠΌΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π² няколко индустриални сСктора. По-спСциално, вас интСрСсуват ΠΏΠ΅Ρ‚Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ с Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° Π°ΠΊΡ†ΠΈΠΈ Π² всСки ΠΎΡ‚ индустриалнитС сСктори.

Π—Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ са Π½ΡƒΠΆΠ½ΠΈ няколко послСдващи ΡΡ‚ΡŠΠΏΠΊΠΈ Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² нСобходимия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π°ΠΊΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΠΎΠ±Ρ‰ΠΈ Π»ΠΈΠ½ΠΈΠΈ).

  1. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Ρ‚Π΅ΠΌΠ°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° информация Π·Π° Ρ‚ΡŠΡ€Π³ΠΎΠ²ΠΈΡΡ‚Π° с Π°ΠΊΡ†ΠΈΠΈ. Π©Π΅ трябва Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ Ρ‚ΠΈΠΏ StockTransaction Π² ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ Ρ‚ΠΈΠΏ ShareVolume. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ StockTransaction ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈΡ‚Π΅, Π° Π½Π° нас Π½ΠΈ трябват само Π΄Π°Π½Π½ΠΈ Π·Π° количСствата ΠΏΡ€ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡ†ΠΈΠΈ.
  2. Π“Ρ€ΡƒΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ShareVolume ΠΏΠΎ символитС Π½Π° Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅. Π‘Π»Π΅Π΄ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ символитС, Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ свСдСни Π΄ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ суми Π½Π° ΠΎΠ±Π΅ΠΌΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈΡ‚Π΅ Π½Π° Π°ΠΊΡ†ΠΈΠΈ. Π‘Ρ‚Ρ€ΡƒΠ²Π° си Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ KStream.groupBy Π²Ρ€ΡŠΡ‰Π° СкзСмпляр ΠΎΡ‚ Ρ‚ΠΈΠΏ KGroupedStream. А СкзСмпляр ΠΎΡ‚ KTable ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·Π²ΠΈΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ KGroupedStream.reduce.

Какво Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡŠΡ‚ KGroupedStream

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ KStream.groupBy ΠΈ KStream.groupByKey Π²Ρ€ΡŠΡ‰Π°Ρ‚ СкзСмпляр KGroupedStream. KGroupedStream Π΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ прСдставянС Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ слСд Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅. Π’ΠΎΠΉ Π½Π΅ Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° пряка Ρ€Π°Π±ΠΎΡ‚Π°. ВмСсто Ρ‚ΠΎΠ²Π°, KGroupedStream сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ агрСгация, Ρ‡ΠΈΠΉΡ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ KTable. И Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ агрСгация Π΅ KTable ΠΈ Π² тях сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ, Π΅ възмоТно Π½Π΅ всички Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ KTable.groupBy Π²Ρ€ΡŠΡ‰Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ KGroupedTable β€” ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ прСдставянС Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€Π΅Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡.

НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠ° ΠΏΠ°ΡƒΠ·Π° ΠΈ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Рис. 5.9, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ смС постигнали. Π’Π°Π·ΠΈ топология Π±ΠΈ трябвало Π΄Π° Π²ΠΈ Π΅ Π΄ΠΎΠ±Ρ€Π΅ извСстна.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π‘Π΅Π³Π° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΊΠΎΠ΄Π° Π·Π° Ρ‚Π°Π·ΠΈ топология (ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (листинг 5.2).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π΅ ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ дСйствия с няколко Ρ€Π΅Π΄Π°. Π’ ΠΏΡŠΡ€Π²ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° builder.stream ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Π½ΠΎΠ²ΠΎ Π·Π° вас: стойността Π½Π° изброимия Ρ‚ΠΈΠΏ AutoOffsetReset.EARLIEST (ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΈ LATEST), Π·Π°Π΄Π°Π΄Π΅Π½Π° с ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Consumed.withOffsetResetPolicy. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΈΠ·Π±Ρ€ΠΎΠΈΠΌ Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ стратСгия Π·Π° Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° офсСтитС Π·Π° всСки ΠΎΡ‚ KStream ΠΈΠ»ΠΈ KTable, която ΠΈΠΌΠ° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° Π·Π° Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° офсСтитС ΠΎΡ‚ конфигурацията.

GroupByKey ΠΈ GroupBy

Π’ интСрфСйса KStream ΠΈΠΌΠ° Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ Π½Π° записи: GroupByKey ΠΈ GroupBy. И Π΄Π²Π°Ρ‚Π° Π²Ρ€ΡŠΡ‰Π°Ρ‚ KGroupedTable, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ: ΠΊΠ°ΠΊΠ²Π° Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ тях ΠΈ ΠΊΠΎΠ³Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΉ ΠΎΡ‚ тях?

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ GroupByKey сС ΠΏΡ€ΠΈΠ»Π°Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ Π² KStream Π²Π΅Ρ‡Π΅ са Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΈ. И Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ, Ρ„Π»Π°Π³ΡŠΡ‚ "изисква ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сСкциониранС" Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ Π±ΠΈΠ» Π·Π°Π΄Π°Π΄Π΅Π½.

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ GroupBy ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ стС промСняли ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ„Π»Π°Π³ΡŠΡ‚ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сСкциониранС Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° true. Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ слСд ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GroupBy Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ, Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ Ρ‚.Π½. Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сСкциониранС.
РСзюмС: Π²ΠΈΠ½Π°Π³ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ възмоТно, трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° GroupByKey, Π° Π½Π΅ GroupBy.

Какво правят ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ mapValues ΠΈ groupBy Π΅ ясно, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sum() (ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/model/ShareVolume.java) (листинг 5.3).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ ShareVolume.sum Π²Ρ€ΡŠΡ‰Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π°Ρ‚Π° сума Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈΡ‚Π΅ Π½Π° Π°ΠΊΡ†ΠΈΠΈ, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ цялата Π²Π΅Ρ€ΠΈΠ³Π° ΠΎΡ‚ изчислСния прСдставлява KTable. Π‘Π΅Π³Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ°ΠΊΠ²Π° роля ΠΈΠ³Ρ€Π°Π΅ KTable. ΠŸΡ€ΠΈ ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ShareVolume, Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ KTable сС Π·Π°ΠΏΠ°Π·Π²Π° послСдното Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° Π½Π΅ забравятС, Ρ‡Π΅ всички Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сС отразяват Π² ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π°Ρ‰ΠΈΡ shareVolumeKTable, Π½ΠΎ Π½Π΅ всички сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ KTable ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ агрСгация (ΠΏΠΎ количСството ΠΏΡ€ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡ†ΠΈΠΈ), Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ с Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈ Π½Π° Π°ΠΊΡ†ΠΈΠΈ във всяка индустрия. ДСйствията Π½ΠΈ ΠΏΡ€ΠΈ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° дСйствията ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° агрСгация.

  1. Π˜Π·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ ΠΎΡ‰Π΅ Π΅Π΄Π½Π° опСрация groupBy Π·Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ShareVolume ΠΏΠΎ индустрии.
  2. ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠ΅Ρ‚Π΅ към сумиранС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ ShareVolume. Π’ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ Π·Π° агрСгация Π΅ опашка с фиксиран ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. Π’ Ρ‚Π°ΠΊΠ°Π²Π° опашка с фиксиран Ρ€Π°Π·ΠΌΠ΅Ρ€ сС Π·Π°ΠΏΠ°Π·Π²Π°Ρ‚ само ΠΏΠ΅Ρ‚Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ с Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ количСства ΠΏΡ€ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡ†ΠΈΠΈ.
  3. ΠžΡ‚ΠΎΠ±Ρ€Π°Π·Π΅Ρ‚Π΅ ΠΎΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π² стринг стойност ΠΈ Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ ΠΏΠ΅Ρ‚Ρ‚Π΅ Π½Π°ΠΉ-ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π½ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΠΎ количСство Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ индустрии.
  4. Π—Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π² стринг Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² Ρ‚Π΅ΠΌΠ°Ρ‚Π°.

На рис. 5.10 Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π³Ρ€Π°Ρ„ΠΈΠΊ Π½Π° топологията Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, вторият ΠΊΡ€ΡŠΠ³ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ прост.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π‘Π΅Π³Π°, слСд ΠΊΠ°Ρ‚ΠΎ ясно Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ структурата Π½Π° Ρ‚ΠΎΠ·ΠΈ Π²Ρ‚ΠΎΡ€ΠΈ ΠΊΡ€ΡŠΠ³ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ към нСговия ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ (Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (листинг 5.4).

Π’ Ρ‚ΠΎΠ·ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° fixedQueue. Π’ΠΎΠ²Π° Π΅ потрСбитСлски ΠΎΠ±Π΅ΠΊΡ‚ - Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Π·Π° java.util.TreeSet, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° прослСдяванС Π½Π° N-Ρ‚Π΅ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΏΠΎ Ρ€Π΅Π΄Π° Π½Π° намаляванС Π½Π° количСството ΠΏΡ€ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡ†ΠΈΠΈ.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’ΠΈΠ΅ Π²Π΅Ρ‡Π΅ сС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ…Ρ‚Π΅ с извикванията groupBy ΠΈ mapValues, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π΄Π° сС спирамС Π½Π° тях (ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° KTable.toStream, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ KTable.print сС счита Π·Π° остарял). Но всС ΠΎΡ‰Π΅ Π½Π΅ стС Π²ΠΈΠΆΠ΄Π°Π»ΠΈ KTable вСрсията Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° aggregate(), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ ΠΎΡ‚Π΄Π΅Π»ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΎΠ±ΡΡŠΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, KTable сС ΠΎΡ‚Π»ΠΈΡ‡Π°Π²Π° с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ записитС с Π΅Π΄Π½Π°ΠΊΠ²ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ сС считат Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. KTable замСства старата запись с Π½ΠΎΠ²Π°. АгрСгиранСто става ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½: Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Ρ‚ сС послСднитС записи с Π΅Π΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡. ΠŸΡ€ΠΈ ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° запис, Ρ‚ΠΎΠΉ сС добавя Π² инстанцията Π½Π° класа FixedSizePriorityQueue с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° сумиращия функция (вторият ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° aggregate), Π½ΠΎ Π°ΠΊΠΎ Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π΄Ρ€ΡƒΠ³Π° запись с Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΡŽΡ‡, старата запись сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° изваТдащия (трСтият ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° aggregate).

Π’ΠΎΠ²Π° всичко ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΡ€, FixedSizePriorityQueue, ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π° всички стойности с Π΅Π΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡, Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π΄Π²ΠΈΠΆΠ΅Ρ‰Π° сС сума Π½Π° количСствата N Π½Π°ΠΉ-ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ Π°ΠΊΡ†ΠΈΠΈ. Π’ΡŠΠ² всяка ΠΏΠΎΡΡ‚ΡŠΠΏΠΈΠ»Π° записка ΠΈΠΌΠ° ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ количСство ΠΏΡ€ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π°ΠΊΡ†ΠΈΠΈ. KTable Ρ‰Π΅ Π²ΠΈ прСдостави информация Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠΈ Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈΡ‚Π΅ сС ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‚ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Π½Π° всяка ΠΎΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

НаучихмС сС Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΠΈ Π½Π΅Ρ‰Π°:

  • Π³Ρ€ΡƒΠΏΠΈΡ€Π°ΠΌΠ΅ стойноститС Π² KTable ΠΏΠΎ общия ΠΊΠ»ΡŽΡ‡;
  • изпълнявамС ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ свиванС ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½e Π²ΡŠΡ€Ρ…Ρƒ Ρ‚Π΅Π·ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½ΠΈ стойности.

Π£ΠΌΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° изпълнявамС Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° смисъла Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‰ΠΈ ΠΏΡ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Kafka Streams, ΠΈ Π·Π° установяванС Π½Π° информацията, която Ρ‚Π΅ носят.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΡΠ²ΡŠΡ€Π·Π°Ρ…ΠΌΠ΅ някои ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ понятия, обсъТдани ΠΏΠΎ-Ρ€Π°Π½ΠΎ Π² Ρ‚Π°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π°. Π’ Π³Π»Π°Π²Π° 4 Ρ€Π°Π·ΠΊΠ°Π·Π°Ρ…ΠΌΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ Π΅ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ отказоустойчивото, Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Π³Π»Π°Π²Π° дСмонстрира Π·Π°Ρ‰ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ β€” Ρ‚ΠΎ прСдоставя Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° прослСдяванС Π½Π° информацията, която Π²Π΅Ρ‡Π΅ стС Π²ΠΈΠ΄Π΅Π»ΠΈ. Локалният Π΄ΠΎΡΡ‚ΡŠΠΏ позволява Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ забавяния, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈ устойчиво Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

ΠŸΡ€ΠΈ изпълнСниС Π½Π° всяка опСрация Π½Π° свиванС ΠΈΠ»ΠΈ агрСгация Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° посочитС ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° свиванС ΠΈ агрСгация Π²Ρ€ΡŠΡ‰Π°Ρ‚ инстанция Π½Π° KTable, Π° KTable ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ, Π·Π° Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ старитС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ с Π½ΠΎΠ²ΠΈ. ΠšΠ°ΠΊΡ‚ΠΎ видяхтС, Π½Π΅ всички Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° агрСгация са ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΊΡ€Π°ΠΉΠ½Π° информация. Ако Π½Π΅ сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, KTable Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π½Π°ΠΏΡ€Π΅Π΄ всички Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ агрСгацията ΠΈ свиванСто.

Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅, Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ агрСгация, Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅ β€” Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ ΠΎΠΊΠΎΠ½Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

5.3.2. Оконни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° сСкция сС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ…ΠΌΠ΅ с Β«ΠΏΠ»ΡŠΠ·Π³Π°Ρ‰ΠΈΒ» сС свивания ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΡˆΠ΅ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ свиванС Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈΡ‚Π΅ Π½Π° Π°ΠΊΡ†ΠΈΠΈ с послСдваща агрСгация Π½Π° ΠΏΠ΅Ρ‚Ρ‚Π΅ Π½Π°ΠΉ-ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π½ΠΈ Π½Π° борсата Π°ΠΊΡ†ΠΈΠΈ.

Понякога ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΈ свивания Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ. А понякога Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ само Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅. НапримСр, Π΄Π° сС изчисли ΠΊΠΎΠ»ΠΊΠΎ борсови ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° компания са ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ ΠΏΡ€Π΅Π· послСднитС 10 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. Или ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ са ΠΊΠ»ΠΈΠΊΠ½Π°Π»ΠΈ Π½Π° новия Ρ€Π΅ΠΊΠ»Π°ΠΌeΠ½ Π±Π°Π½Π΅Ρ€ ΠΏΡ€Π΅Π· послСднитС 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, Π½ΠΎ с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ, отнасящи сС само Π·Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈ (Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ).

Π‘Ρ€ΠΎΠ΅Π½Π΅ Π½Π° борсовитС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡

Π’ слСдващия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ сС Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌ с прослСдяванС Π½Π° борсовитС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ няколко Ρ‚ΡŠΡ€Π³ΠΎΠ²Ρ†ΠΈ β€” ΠΈΠ»ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΠ»ΠΈ ΡƒΠΌΠ½ΠΈ финансисти-ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΠΈ.

Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π΄Π²Π΅ възмоТни ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ прослСдяванС. Π•Π΄Π½Π°Ρ‚Π° ΠΎΡ‚ тях Π΅ нСобходимостта Π΄Π° Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΊΡƒΠΏΡƒΠ²Π°Ρ‚/ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‚ Π»ΠΈΠ΄Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Π·Π°Ρ€Π°. Ако Ρ‚Π΅Π·ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈΠ³Ρ€Π°Ρ‡ΠΈ ΠΈ ΠΎΠΏΠΈΡ‚Π½ΠΈ инвСститори Π²ΠΈΠΆΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄ сСбС си Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΠΈΠΌΠ° смисъл Π΄Π° слСдватС Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ стратСгии. Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° сС Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Ρ‚ всякакви възмоТни ΠΏΡ€ΠΈΠ·Π½Π°Ρ†ΠΈ Π½Π° Π½Π΅Π·Π°ΠΊΠΎΠ½Π½ΠΈ сдСлки, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° информация. Π—Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ корСлацията Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ скоковС Π² ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈΡ‚Π΅ с Π²Π°ΠΆΠ½ΠΈ ΠΏΡ€Π΅ΡΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.

Π’Π°ΠΊΠΎΠ²Π° прослСдяванС сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ слСднитС Π΅Ρ‚Π°ΠΏΠΈ:

  • създаванС Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΎΡ‚ Ρ‚Π΅ΠΌΠ°Ρ‚Π° stock-transactions;
  • Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ Π½Π° входящитС записи ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡Π° ΠΈ борсов символ Π½Π° акцията. Π˜Π·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° groupBy Π²Ρ€ΡŠΡ‰Π° СкзСмпляр ΠΎΡ‚ класа KGroupedStream;
  • Π²ΡŠΡ€Π½Π°Ρ‚ΠΈΡΡ‚ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° KGroupedStream.windowedBy ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ с Π²Ρ€Π΅ΠΌΠ΅Π²ΠΎ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†, позволява Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅. Π’ зависимост ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π½Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π° сС Π²Ρ€ΡŠΡ‰Π° ΠΈΠ»ΠΈ TimeWindowedKStream, ΠΈΠ»ΠΈ SessionWindowedKStream;
  • Π±Ρ€ΠΎΠ΅Π½Π΅ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π·Π° опСрацията ΠΏΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅. ΠžΠΊΠΎΠ½Π½ΠΈΡΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½ΠΈ опрСдСля Π΄Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ запис Π΅ Π²Π·Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π² Π±Ρ€ΠΎΠ΅Π½Π΅Ρ‚ΠΎ;
  • записванС Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π² Ρ‚Π΅ΠΌΠ° ΠΈΠ»ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Вопологията Π½Π° Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ проста, Π½ΠΎ визуализацията ѝ няма Π΄Π° Π½Π°Π²Ρ€Π΅Π΄ΠΈ. НСка ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π½Π° рис. 5.11.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ функционалността Π½Π° ΠΎΠΊΠΎΠ½Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΊΠΎΠ΄.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

Π’ΠΈΠΏΠΎΠ²Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

Π’ Kafka Streams ΠΈΠΌΠ° Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ:

  • сСансови;
  • β€žΠΊΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡβ€œ (tumbling);
  • сколзящи/β€žΠΏΡ€Ρ‹Π³Π°ΡŽΡ‰ΠΈΠ΅β€œ (sliding/hopping).

КоС Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ β€” зависи ΠΎΡ‚ бизнСс изискванията. β€žΠšΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡβ€œ ΠΈ β€žΠΏΡ€Ρ‹Π³Π°ΡŽΡ‰ΠΈΠ΅β€œ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ са ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ограничСнията Π½Π° сСансовитС са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с дСйствията Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ β€” ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° сСсията (-ΠΈΡ‚Π΅) сС опрСдСля изцяло ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ»ΠΊΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ сС Π΄ΡŠΡ€ΠΆΠΈ потрСбитСлят. Най-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅ Π΄Π° Π½Π΅ забравямС, Ρ‡Π΅ всички Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ сС Π±Π°Π·ΠΈΡ€Π°Ρ‚ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈΡ‚Π΅ ΠΌΠ°Ρ€ΠΊΠΈ Π½Π° записитС, Π° Π½Π΅ Π½Π° систСмното Π²Ρ€Π΅ΠΌΠ΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΡˆΠ°Ρ‚Π° топология с всСки ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ. ЦСлият ΠΊΠΎΠ΄ Ρ‰Π΅ бъдС прСдставСн само Π² ΠΏΡŠΡ€Π²ΠΈΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€; Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ няма Π΄Π° сС промСня Π½ΠΈΡ‰ΠΎ, освСн Ρ‚ΠΈΠΏΠ° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ с ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ.

БСансови ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

БСансовитС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΎΡ‚ всички останали Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ. Π’Π΅ са ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π° ΠΎΡ‚ активността Π½Π° потрСбитСля (ΠΈΠ»ΠΈ активността Π½Π° ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π°, която искатС Π΄Π° слСдитС). БСансовитС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ сС Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΏΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈ Π½Π° бСздСйствиС.

Π€ΠΈΠ³ΡƒΡ€Π° 5.12 ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π° понятиСто Π·Π° сСансови ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ. По-малкият сСанс Ρ‰Π΅ сС слСС с сСанса отляво. А ΡΠ΅Π°Π½ΡΡŠΡ‚ отдясно Ρ‰Π΅ бъдС ΠΎΡ‚Π΄Π΅Π»Π΅Π½, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ слСдва слСд дълъг ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° бСздСйствиС. БСансовитС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ са основани Π½Π° дСйствията Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ/Π΄Π°Ρ‚Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ ΠΎΡ‚ записитС, Π·Π° Π΄Π° опрСдСлят с ΠΊΠΎΠΉ сСанс Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ записа.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

ИзползванС Π½Π° сСансови ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π·Π° прослСдяванС Π½Π° борсови Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ сСансовитС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ, Π·Π° Π΄Π° ΡƒΠ»ΠΎΠ²ΠΈΠΌ информация Π·Π° борсови Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. РСализацията Π½Π° сСансовитС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² листинга 5.5 (ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ топология Π²Π΅Ρ‡Π΅ стС срСщали, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π½ΡƒΠΆΠ΄Π° Π΄Π° Π³ΠΈ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ‚ΡƒΠΊ. Но ΠΈΠΌΠ° ΠΈ няколко Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ сСга Ρ‰Π΅ обсъдим.

ΠŸΡ€ΠΈ всяка опСрация groupBy ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° някаква Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΎΠ½Π½Π° опСрация (Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅, свиванС ΠΈΠ»ΠΈ прСброяванС Π½Π° количСства). МоТС Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΠΈΠ»ΠΈ Π°ΠΊΡƒΠΌΡƒΠ»ΠΈΡ€Π°Ρ‰ΠΎ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎ с нарастващи суми, ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎ, ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π²Π·ΠΈΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ записитС Π² Π·Π°Π΄Π°Π΄Π΅Π½ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†.

ΠšΠΎΠ΄ΡŠΡ‚ ΠΎΡ‚ листинга 5.5 ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° прСброяванС Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° сСансовитС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ. На Ρ„ΠΈΠ³ΡƒΡ€Π° 5.13 Ρ‚Π΅Π·ΠΈ дСйствия сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)) създавамС сСансово ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ‡Π΅ с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π° бСздСйствиС ΠΎΡ‚ 20 сСкунди ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Ρ‰ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΎΡ‚ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π»ΡŠΡ‚ Π½Π° бСздСйствиС ΠΎΡ‚ 20 сСкунди ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π° всяка запис, която ΠΏΠΎΡΡ‚ΡŠΠΏΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° 20 сСкунди слСд Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° тСкущия сСанс Π² тСкущия (Π°ΠΊΡ‚ΠΈΠ²Π΅Π½) сСанс.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° посочвамС ΠΊΠ°ΠΊΠ²Π° опСрация Π½Π° агрСгация трябва Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π² сСсийния ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† β€” Π² Ρ‚ΠΎΠ·ΠΈ случай count. Ако входящият запис ΠΈΠ·Π»Π΅Π·Π΅ извън ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π½Π° бСздСйствиС (ΠΎΡ‚ която ΠΈ Π΄Π° Π΅ страна Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π°Ρ‚Π° ΠΌΠ°Ρ€ΠΊΠ°), ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ създава Π½ΠΎΠ²Π° сСсия. Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π»ΡŠΡ‚ Π½Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° сСсията Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ позволява закъснСли Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ извън ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π½Π° бСздСйствиС Π½Π° сСсията, Π½ΠΎ всС ΠΎΡ‰Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π°, Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈ краят Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° сСсия, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° сливания, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° Π½Π°ΠΉ-Ρ€Π°Π½Π½Π°Ρ‚Π° ΠΈ Π½Π°ΠΉ-ΠΊΡŠΡΠ½Π°Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠ°.

Π”Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ няколко записа ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° count, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ работят сСсиитС (Ρ‚Π°Π±Π». 5.1).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π°Ρ‚ записи, Ρ‚ΡŠΡ€ΡΠΈΠΌ Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ сСсии с ΠΊΠ»ΡŽΡ‡Π°, Ρ‡ΠΈΠΉΡ‚ΠΎ ΠΊΡ€Π°ΠΉ Π΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠ° β€” ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π° бСздСйствиС ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π΅ ΠΏΠΎ-късно ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠ° + ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π° бСздСйствиС. Π‘ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ°ΠΌΠ΅ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ записа ΠΎΡ‚ Ρ‚Π°Π±Π». 5.1, ΠΊΠΎΠΈΡ‚ΠΎ сС сливат Π² Π΅Π΄Π½Π° сСсия ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½.

1. ΠŸΡŠΡ€Π²ΠΈ ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π° запис 1, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΡ€Π°ΠΉ ΠΈ Π΅ 00:00:00.

2. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π° запис 2 ΠΈ Ρ‚ΡŠΡ€ΡΠΈΠΌ сСсии, Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‰ΠΈ Π½Π΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΎΡ‚ 23:59:55 ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ Π½Π΅ ΠΏΠΎ-късно ΠΎΡ‚ 00:00:35. НамирамС запис 1 ΠΈ сливаСм сСсиитС 1 ΠΈ 2. Π’Π·Π΅ΠΌΠ°ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° сСсия 1 (ΠΏΠΎ-Ρ€Π°Π½Π½ΠΎΡ‚ΠΎ) ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΡ€Π°ΠΉ Π½Π° сСсия 2 (ΠΏΠΎ-ΠΊΡŠΡΠ½ΠΎΡ‚ΠΎ), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π°ΡˆΠ°Ρ‚Π° Π½ΠΎΠ²Π° сСсия Π·Π°ΠΏΠΎΡ‡Π²Π° Π² 00:00:00 ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° Π² 00:00:15.

3. ΠŸΠΎΡΡ‚ΡŠΠΏΠ²Π° запис 3, Ρ‚ΡŠΡ€ΡΠΈΠΌ сСсии ΠΌΠ΅ΠΆΠ΄Ρƒ 00:00:30 ΠΈ 00:01:10 ΠΈ Π½Π΅ Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½Π°. ДобавямС Π²Ρ‚ΠΎΡ€Π° сСсия Π·Π° ΠΊΠ»ΡŽΡ‡ 123-345-654,FFBE, която Π·Π°ΠΏΠΎΡ‡Π²Π° ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° Π² 00:00:50.

4. ΠŸΠΎΡΡ‚ΡŠΠΏΠ²Π° запис 4 ΠΈ Ρ‚ΡŠΡ€ΡΠΈΠΌ сСсии ΠΌΠ΅ΠΆΠ΄Ρƒ 23:59:45 ΠΈ 00:00:25. Π’ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ ΠΈ Π΄Π²Π΅Ρ‚Π΅ сСсии β€” 1 ΠΈ 2. Всички Ρ‚Ρ€ΠΈ сСсии сС сливат Π² Π΅Π΄Π½Π°, с Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ 00:00:00 ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΡ€Π°ΠΉ 00:00:15.

ΠžΡ‚ Ρ€Π°Π·ΠΊΠ°Π·Π°Π½ΠΎΡ‚ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π», слСдва Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ слСднитС Π²Π°ΠΆΠ½ΠΈ нюанси:

  • сСсиитС Π½Π΅ са ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ с фиксиран Ρ€Π°Π·ΠΌΠ΅Ρ€. ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° сСсията сС опрСдСля ΠΎΡ‚ активността Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° зададСния Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»;
  • Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅ опрСдСлят Π΄Π°Π»ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Π° Π² ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π° сСсия ΠΈΠ»ΠΈ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° бСздСйствиС.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ обсъдим слСдващия Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ β€” β€žΠΏΡ€Π΅Π²ΡŠΡ€Ρ‚Π°Ρ‰ΠΈ ΡΠ΅β€œ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ.

β€žΠŸΡ€Π΅Π²ΡŠΡ€Ρ‚Π°Ρ‰ΠΈ ΡΠ΅β€œ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

Β«Π’ΡƒΠΌΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈΒ» (ΠΊΡƒΠ²ΠΈΡ€Π°Ρ‰ΠΈ) ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ улавят ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΏΠΎΠΏΠ°Π΄Π°Ρ‰ΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ трябва Π΄Π° улавятС всички борсови Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° Π΄Π°Π΄Π΅Π½Π° компания Π½Π° всСки 20 сСкунди, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ всички ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄. Π’ края Π½Π° 20-сСкундния ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†ΡŠΡ‚ «сС Ρ‚ΡƒΠΌΠ±Π»ΠΈΡ€Π°Β» ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° към Π½ΠΎΠ² 20-сСкундСн ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π° наблюдСниС. Рисунок 5.14 ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π° Ρ‚Π°Π·ΠΈ ситуация.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, всички ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ Π·Π° послСднитС 20 сСкунди, са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π°. Π’ края Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ сС създава Π½ΠΎΠ² ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†.

Π’ листинга 5.6 Π΅ прСдоставСн ΠΊΠΎΠ΄, дСмонстриращ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Β«Ρ‚ΡƒΠΌΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈΒ» ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π·Π° улавянС Π½Π° борсови Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° всСки 20 сСкунди (ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π°Π·ΠΈ ΠΌΠ°Π»ΠΊΠ° промяна Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° TimeWindows.of, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Β«Ρ‚ΡƒΠΌΠ±Π»ΠΈΡ€Π°Ρ‰Β» ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ няма ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° until(), ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŠΡ‚ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Ρ€Π°Π²Π΅Π½ Π½Π° 24 часа.

Накрая Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към послСдния Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ β€” «скачащи» (hopping) ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ.

Π‘ΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈ («скачащи») ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

Π‘ΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΡ‚Π΅/«скачащитС» (sliding/hopping) ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ са ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Β«Ρ‚ΡƒΠΌΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈΡ‚Π΅Β», Π½ΠΎ с ΠΌΠ°Π»ΠΊΠ° Ρ€Π°Π·Π»ΠΈΠΊΠ°. Π‘ΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π½Π΅ ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Ρ‚ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° врСмСвия ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ Π½ΠΎΠ² ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π½Π΅Π΄Π°Π²Π½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Π’Π΅ стартират Π½ΠΎΠ²ΠΈ изчислСния слСд ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅, ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π°.

Π—Π° Π΄Π° ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Β«Ρ‚ΡƒΠΌΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈΡ‚Π΅Β» ΠΈ «скачащитС» ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ, Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ към ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с Π±Ρ€ΠΎΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° борсови Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ΠΠ°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π» всС ΠΎΡ‰Π΅ Π΅ Π΄Π° ΠΏΡ€Π΅Π±Ρ€ΠΎΠΈΠΌ броя Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, Π½ΠΎ Π½Π΅ искамС Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅ цСлия ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ брояча. ВмСсто Ρ‚ΠΎΠ²Π° Ρ‰Π΅ обновявамС брояча Π½Π° ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ. НапримСр, Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Π΄Π° Π±Ρ€ΠΎΠΈΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° всСки 20 сСкунди, Π½ΠΎ Ρ‰Π΅ обновявамС брояча Π½Π° всСки 5 сСкунди, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 5.15. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π° с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ с ΠΏΡ€ΠΈΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‰ΠΈ сС Π΄Π°Π½Π½ΠΈ.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’ листинга 5.7 Π΅ прСдоставСн ΠΊΠΎΠ΄ Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ (ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
ΠžΠ³Π»Π΅Π΄Π°Π»Π½ΠΎΡ‚ΠΎ" ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΎ Π² "скачащо" Ρ‡Ρ€Π΅Π· добавянС Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° advanceBy(). Π’ дадСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŠΡ‚ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π΅ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ.

Π’ Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π» видяхтС ΠΊΠ°ΠΊ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ с Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ. По-спСциално, Π±ΠΈΡ… искал Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ слСднитС Ρ‚Ρ€ΠΈ Π½Π΅Ρ‰Π° ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π»:

  • Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° сСсийнитС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π½Π΅ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ, Π° ΠΎΡ‚ активността Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅;
  • "ΠΎΠ³Π»Π΅Π΄Π°Π»Π½ΠΈΡ‚Π΅" ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ прСдоставят информация Π·Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅;
  • Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° "скачащитС" ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π΅ фиксирана, Π½ΠΎ Ρ‚Π΅ сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ чСсто ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ прСсичащи сС записи Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π½Π°ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°ΠΌΠ΅ KTable ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² KStream Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅.

5.3.3. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ KStream ΠΈ KTable

Π’ Π³Π»Π°Π²Π° 4 ΠΎΠ±ΡΡŠΠ΄ΠΈΡ…ΠΌΠ΅ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡ‚Π° KStream. Π‘Π΅Π³Π° Ρ‰Π΅ Π½Π°ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ KTable ΠΈ KStream. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ слСдната проста ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°. KStream Π΅ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ записи, Π° KTable β€” ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° записи, Π½ΠΎ понякога ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ контСкст към ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ записи с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ KTable.

НСка Π²Π·Π΅ΠΌΠ΅ΠΌ Π΄Π°Π½Π½ΠΈ Π·Π° броя Π½Π° борсовитС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ Π΄Π° Π³ΠΈ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с борсови Π½ΠΎΠ²ΠΈΠ½ΠΈ ΠΏΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ индустрии. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π·Π° Π΄Π° постигнСтС Ρ‚ΠΎΠ²Π° с Π²Π΅Ρ‡Π΅ наличния ΠΊΠΎΠ΄.

  1. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚Π° KTable с Π΄Π°Π½Π½ΠΈ Π·Π° броя Π½Π° борсовитС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² KStream, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π° с ΠΊΠ»ΡŽΡ‡, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‰ индустрията, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ символ Π½Π° Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅.
  2. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ KTable, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π΅ΠΌΠ°Ρ‚Π° с борсови Π½ΠΎΠ²ΠΈΠ½ΠΈ. Π’ΠΎΠ·ΠΈ Π½ΠΎΠ² KTable Ρ‰Π΅ бъдС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ·ΠΈΡ€Π°Π½ ΠΏΠΎ индустрии.
  3. Π‘Π²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π½ΠΎΠ²ΠΈΠ½ΠΈΡ‚Π΅ с информацията Π·Π° броя Π½Π° борсовитС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ индустрии.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΠ»Π°Π½ Π·Π° дСйствиС.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° KTable Π² KStream

Π—Π° Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚Π΅ KTable Π² KStream, трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слСдното.

  1. Π˜Π·Π²ΠΈΠΊΠ°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° KTable.toStream().
  2. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° KStream.map Π·Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π° с ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° индустрията, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚Π° TransactionSummary ΠΎΡ‚ СкзСмпляра Windowed.

НиС Ρ‰Π΅ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² слСдната Π²Π΅Ρ€ΠΈΠ³Π° (ΠΊΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (листинг 5.8).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Въй ΠΊΠ°Ρ‚ΠΎ изпълнявамС опСрация KStream.map, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ сСкциониранС Π½Π° Π²ΡŠΡ€Π½Π°Ρ‚ΠΈΡ экзСмпляр KStream сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² съСдинСниС.

Π—Π°Π²ΡŠΡ€ΡˆΠΈΡ…ΠΌΠ΅ процСса Π½Π° трансформация, сСга трябва Π΄Π° създадСм ΠΎΠ±Π΅ΠΊΡ‚ KTable Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° борсови Π½ΠΎΠ²ΠΈΠ½ΠΈ.

БъздаванС Π½Π° KTable Π·Π° борсови Π½ΠΎΠ²ΠΈΠ½ΠΈ

Π—Π° щастиС, Π·Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ KTable Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° само Π΅Π΄Π½Π° Ρ€Π΅Π΄ ΠΊΠΎΠ΄ (Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (листинг 5.9).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π‘Ρ‚Ρ€ΡƒΠ²Π° си Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΡƒΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Serde, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² настройкитС сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ строкови Serde. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° изброяванСто EARLIEST, Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° сС запълва с записи Π² самото Π½Π°Ρ‡Π°Π»ΠΎ.

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към послСдната ΡΡ‚ΡŠΠΏΠΊΠ° – ΡΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.

БъСдинСниС Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π½ΠΎΠ²ΠΈΠ½ΠΈΡ‚Π΅ с Π΄Π°Π½Π½ΠΈ Π·Π° броя Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅

Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° съСдинСниС Π½Π΅ прСдставлява трудности. Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ляво съСдинСниС, Π² случай Ρ‡Π΅ няма борсови Π½ΠΎΠ²ΠΈΠ½ΠΈ Π·Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° индустрия (нСобходимият ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (листинг 5.10).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’Π°Π·ΠΈ опСрация leftJoin Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ проста. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡ‚Π° Π² Π³Π»Π°Π²Π° 4, ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ JoinWindow Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ KStream-KTable Π·Π° всСки ΠΊΠ»ΡŽΡ‡ Π² KTable ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° само Π΅Π΄Π½ΠΎ запис. Π’Π°ΠΊΠΎΠ²Π° съСдинСниС Π½Π΅ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ: Π·Π°ΠΏΠΈΡΡŠΡ‚ ΠΈΠ»ΠΈ Π΅ Π² KTable, ΠΈΠ»ΠΈ Π³ΠΎ няма. ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΠΈΠ·Π²ΠΎΠ΄: с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ KTable ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠ±ΠΎΠ³Π°Ρ‚ΠΈΠΌ KStream с ΠΏΠΎ-рядко Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ справочни Π΄Π°Π½Π½ΠΈ.

А сСга Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° обогатяванС Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° ΠΎΡ‚ KStream.

5.3.4. ΠžΠ±Π΅ΠΊΡ‚ΠΈ GlobalKTable

ΠšΠ°ΠΊΡ‚ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅, ΠΈΠΌΠ° нСобходимост ΠΎΡ‚ обогатяванС Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΈΠ»ΠΈ добавянС Π½Π° контСкст към тях. Π’ Π³Π»Π°Π²Π° 4 видяхтС съСдинСния Π½Π° Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡ‚Π° KStream, Π° Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Ρ€Π°Π·Π΄Π΅Π» – съСдинСниС ΠΌΠ΅ΠΆΠ΄Ρƒ KStream ΠΈ KTable. Π’ΡŠΠ² всички Ρ‚Π΅Π·ΠΈ случаи Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сСкциониранС Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ сС отразяват Π½Π° Π½ΠΎΠ² Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ стойност. Понякога ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ сСкциониранС сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ, Π° понякога Kafka Streams Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ сСкциониранС Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ са сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΈ записитС трябва Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ‚ Π² Π½ΠΎΠ²ΠΈΡ‚Π΅ сСкции, ΠΈΠ½Π°Ρ‡Π΅ ΡΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС нСвъзмоТно (Ρ‚ΠΎΠ²Π° бСшС обсъдСно Π² Π³Π»Π°Π²Π° 4, Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π° β€žΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сСкциониранС Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅β€œ ΠΎΡ‚ ΠΏΠΎΠ΄Π³Π»Π°Π²Π° 4.2.4).

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ сСкциониранС ΠΈΠΌΠ° своя Ρ†Π΅Π½Π°

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ сСкциониранС изисква Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ β€” Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π·Π° рСсурси Π·Π° създаванС Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ Ρ‚Π΅ΠΌΠΈ, Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΠΎΡ‰Π΅ Π΅Π΄Π½Π° Ρ‚Π΅ΠΌΠ°; Ρ‚ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΡ€Π°Π΄ΠΈ запис ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°. ОсвСн Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ аспСкт ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅, трябва Π΄Π° сС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ Π² ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π°, Π΄Π° сС отобразят записитС с Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сСкциониранС.

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ с ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ

Π’ някои случаи ΠΎΠ±Π΅ΠΌΡŠΡ‚ Π½Π° справочнитС Π΄Π°Π½Π½ΠΈ, с ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΠ»Π°Π½ΠΈΡ€Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, Π΅ относитСлно малък, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΈΠΌ копия напълно ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΠΎΠ±Π΅Ρ€Π°Ρ‚ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π½Π° всСки ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅. Π—Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ситуации Π² Kafka Streams Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½ клас GlobalKTable.

ЕкзСмпляритС Π½Π° GlobalKTable са ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π° всички Π΄Π°Π½Π½ΠΈ Π½Π° всСки ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅. И Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π° всСки ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Ρ‚ всички Π΄Π°Π½Π½ΠΈ, няма Π½ΡƒΠΆΠ΄Π° Π΄Π° сС сСкционира ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π° Π½Π° справочнитС Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π·Π° всички сСкции. Π§Ρ€Π΅Π· ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ GlobalKTable ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΠΈ Π±Π΅Π·ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ. НСка сС Π²ΡŠΡ€Π½Π΅ΠΌ към Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ, Π·Π° Π΄Π° дСмонстрирамС Ρ‚Π°Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚.

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ KStream с ΠΎΠ±Π΅ΠΊΡ‚ΠΈ GlobalKTable

Π’ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π» 5.3.2 ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ…ΠΌΠ΅ ΠΎΠΊΠΎΠ½Π½ΠΎ агрСгация Π½Π° борсовитС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ агрСгация ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ…Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠ°:

{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ…Π° Π½Π° поставСната Ρ†Π΅Π», Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π°ΠΊΠΎ сС ΠΈΠ·Π²Π΅Π΄Π΅ ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΡŠΠ»Π½ΠΎΡ‚ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° компанията. Π—Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° компанията, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ°Ρ‚ ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ, Π½ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС направят Π΄Π²Π΅ трансформации Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сСкциониранС. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° GlobalKTable ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π—Π° Ρ†Π΅Π»Ρ‚Π° Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡ‚Π° countStream ΠΎΡ‚ листинга 5.11 (ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/GlobalKTableExample.java), ΠΊΠ°Ρ‚ΠΎ Π³ΠΎ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡ‚Π° GlobalKTable.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’Π΅Ρ‡Π΅ ΠΎΠ±ΡΡŠΠ΄ΠΈΡ…ΠΌΠ΅ Ρ‚ΠΎΠ²Π° ΠΏΠΎ-Ρ€Π°Π½ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π΄Π° сС повтарям. Но Ρ‰Π΅ подчСртая, Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ във функцията toStream().map Π΅ абстрахиран Π² ΠΎΠ±Π΅ΠΊΡ‚-функция вмСсто Π²Π³Ρ€Π°Π΄Π΅Π½Π° lambda-ΠΈΠ·Ρ€Π°Π· Π·Π° удобочитаСмост.

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ обявяванСто Π½Π° Π΄Π²Π° СкзСмпляра Π½Π° GlobalKTable (прСдоставСният ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (листинг 5.12).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ‚Π΅ΠΌΠΈΡ‚Π΅ сС описват с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΈΠ·Π±Ρ€ΠΎΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅.

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΡ…ΠΌΠ΅ всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, остава Π΄Π° напишСм ΠΊΠΎΠ΄Π° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ (ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (листинг 5.13).

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π² Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΈΠΌΠ° Π΄Π²Π΅ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ, Ρ‚Π΅ са ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π² Π²Π΅Ρ€ΠΈΠ³Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ сС ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ‚ Π² края Π½Π° цялата опСрация.

ΠŸΡ€ΠΈ стартиранС Π½Π° горСпосочСната опСрация Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ слСдния Π²ΠΈΠ΄:

{customer='Barney, Smith' company="Exxon", transactions= 17}

Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π΅ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»Π°, Π½ΠΎ Ρ‚Π΅Π·ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΠΎ-ясно.

Ако мислитС ΠΈ Π·Π° Π³Π»Π°Π²Π° 4, Π²Π΅Ρ‡Π΅ стС Π²ΠΈΠΆΠ΄Π°Π»ΠΈ няколко Ρ‚ΠΈΠΏΠ° ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ Π² дСйствиС. Π’Π΅ са ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ Π² Ρ‚Π°Π±Π». 5.2. Π’Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° отразява Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ Π·Π° вСрсия 1.0.0 Π½Π° Kafka Streams; Π² Π±ΡŠΠ΄Π΅Ρ‰ΠΈ издания ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΡΡ‚ΡŠΠΏΡΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.

Книга "Kafka Streams Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микросСрвизи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, напомням основното: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ (KStream) ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΎΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (KTable) с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅. ОсвСн Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° справочнитС Π΄Π°Π½Π½ΠΈ Π½Π΅ Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ голям, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚Π° GlobalKTable. GlobalKTable Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π° всички сСкции Π½Π° всСки ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Kafka Streams, осигурявайки Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π½Π° всички Π΄Π°Π½Π½ΠΈ нСзависимо ΠΎΡ‚ сСкцията, към която ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° ΠΊΠ»ΡŽΡ‡ΡŠΡ‚.

По-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π½Π° Kafka Streams, която позволява наблюдСниС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π±Π΅Π· консумация Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π² Kafka.

5.3.5. Π”ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π·Π° запитвания ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅

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

Π§Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС счита Π·Π° разновидност Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ (materialized views). Π—Π° Π½Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° матСриализирания ΠΈΠ·Π³Π»Π΅Π΄ ΠΎΡ‚ «УикипСдия»: «…физичСски ΠΎΠ±Π΅ΠΊΡ‚ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° заявка. НапримСр, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π»ΠΎΠΊΠ°Π»Π½Π° копия Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ подмноТСство ΠΎΡ‚ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, ΠΈΠ»ΠΈ сводна Ρ‚Π°Π±Π»ΠΈΡ†Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Ρ‡Ρ€Π΅Π· агрСгация» (https://en.wikipedia.org/wiki/Materialized_view).

Kafka Streams ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° позволява ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ заявки (interactive queries) към ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΡ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ. Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ заявката към ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π΅ с Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π½Π° опСрация «само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅Β». Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π΅ сС притСсняватС случайно Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ заявки към ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΡ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π΅ ΠΎΡ‚ голямо Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ прилоТСния β€” ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ‚Π°Π±Π»Π°, Π±Π΅Π· Π½ΡƒΠΆΠ΄Π°Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ потрСбитСля Π½Π° Kafka. Вя повишава ΠΈ СфСктивността Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° записватС Π΄Π°Π½Π½ΠΈ:

  • Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° локалността Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ към тях;
  • ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° сС Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Π½Π΅ сС записват във външно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

ΠžΡΠ½ΠΎΠ²Π½ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ искам Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ заявки към ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ΄Ρ†Π΅Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚ΠΎΠ²Π° Π²ΠΈ Π΄Π°Π²Π°. ВмСсто Π΄Π° консумиратС Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Kafka ΠΈ Π΄Π° записватС записи Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ заявки към ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΡ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ с ΡΡŠΡ‰ΠΈΡ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚. Π”ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈΡ‚Π΅ заявки към ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΡ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ количСство ΠΊΠΎΠ΄ (ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π») ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ софтуСр (ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅ Π½Π° нСобходимост ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅).

Π’ настоящата Π³Π»Π°Π²Π° ΠΎΠ±Ρ…Π²Π°Π½Π°Ρ…ΠΌΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ ΠΎΠ±Π΅ΠΌ информация, Π·Π°Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ прСкратявамС дискусията Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ запитвания към Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡΡ‚Π°. Но Π½Π΅ сС притСснявайтС: Π² Π³Π»Π°Π²Π° 9 Ρ‰Π΅ създадСм просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π° Ρ‚Π°Π±Π»Π° с ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ запитвания. Π—Π° дСмонстрация Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ запитвания ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° тяхната интСграция Π² прилоТСния Π½Π° Kafka Streams Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ някои ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° Ρ‚Π°Π·ΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ Π³Π»Π°Π²ΠΈ.

РСзюмС

  • ΠžΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ KStream олицСтворяват ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, сравними с вмъквания Π² Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠžΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ KTable олицСтворяват ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΎΡ‚ обновлСния, Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ наподобяват обновлСния Π² Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° KTable Π½Π΅ нараства, старитС записи сС замСнят с Π½ΠΎΠ²ΠΈ.
  • ΠžΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ KTable са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ агрСгация.
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ½Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС раздСлят Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ.
  • Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ GlobalKTable ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ справочни Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ всяка Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, нСзависимо ΠΎΡ‚ сСкциониранСто.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈ са съСдинСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ KStream, KTable ΠΈ GlobalKTable.

Π”ΠΎ сСга сС фокусирахмС Π²ΡŠΡ€Ρ…Ρƒ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° прилоТСния Π½Π° Kafka Streams с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° високоуровнСвия DSL KStream. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ високоуровнСвият ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ прСдставлява извСстСн компромис. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° с DSL KStream ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° повишаванС Π½Π° краткостта Π½Π° ΠΊΠΎΠ΄Π° Π·Π° смСтка Π½Π° намаляванС Π½Π° стСпСнта Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ». Π’ слСдващата Π³Π»Π°Π²Π° Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ нискоуровнСвия API Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ΠΈΡ‚Π΅ възли ΠΈ Ρ‰Π΅ ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΈ компромиси. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Ρ‰Π΅ станат ΠΏΠΎ-дълги, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ досСга, Π½ΠΎ Ρ‰Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° създавамС практичСски всСки ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ възСл, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π°.

β†’ По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ с ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Π½Π° сайта Π½Π° издатСлството

β†’ Π—Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Π₯Π°Π±Ρ€ΠΎΠΊ, ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ 25% с ΠΊΡƒΠΏΠΎΠ½ β€” Kafka Streams

β†’ ΠŸΡ€ΠΈ рСализация Π½Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Π·Π° Ρ…Π°Ρ€Ρ‚ΠΈΠ΅Π½Π°Ρ‚Π° вСрсия Π½Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π°, Π½Π° e-mail Ρ‰Π΅ бъдС ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½Π° Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° ΠΊΠ½ΠΈΠ³Π°.

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

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