Книга Β«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 ΠΏΠΎ общия ΠΈΠΌ ΠΊΠ»ΡŽΡ‡;
  • ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ свиванС ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Π²ΡŠΡ€Ρ…Ρƒ Ρ‚Π΅Π·ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½ΠΈ стойности.

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

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

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

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

5.3.2. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

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

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

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

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

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

Π’Π°ΠΊΠΎΠ²Π° наблюдСниС сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΅Ρ‚Π°ΠΏΠΈ ΠΊΠ°Ρ‚ΠΎ:

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

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

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

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

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

Π’ Kafka Streams ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ:

  • сСсийни;
  • ΠΏΠ°Π΄Π°Ρ‰ΠΈ (tumbling);
  • ΠΏΠ»ΡŠΠ·Π³Π°Ρ‰ΠΈ/«скачащи» (sliding/hopping).

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

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

БСсийни ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

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

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

Книга Β«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.

ΠžΡ‚ Ρ€Π°Π·ΠΊΠ°Π·Π°Π½ΠΎΡ‚ΠΎ Π² Ρ‚Π°Π·ΠΈ сСкция Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ слСднитС ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ подробности:

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

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

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

"Π’ΡƒΠΌΠ±Π»ΠΈΡ€ΡƒΡ‰ΠΈ" (tumbling) ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ улавят ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΏΠΎΠΏΠ°Π΄Π°Ρ‰ΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π». ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ трябва Π΄Π° улавятС всички борсови Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° Π΄Π°Π΄Π΅Π½Π° компания Π½Π° всСки 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 Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π° с ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° индустрията, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ СкзСмпляра Windowed ΠΎΠ±Π΅ΠΊΡ‚Π° TransactionSummary.

Π©Π΅ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² послСдоватСлност ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½ (ΠΊΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π° 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 Π΅ абстрахиран Π² ΠΎΠ±Π΅ΠΊΡ‚-функция Π·Π° удобочитаСмост вмСсто Π²Π³Ρ€Π°Π΄Π΅Π½Π° лямбда ΠΈΠ·Ρ€Π°Π·.

БлСдващият Π΅Ρ‚Π°ΠΏ Π΅ обявяванСто Π½Π° Π΄Π²Π° СкзСмпляра Π½Π° 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='Π‘Π°Ρ€Π½ΠΈ, Π‘ΠΌΠΈΡ‚' 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

β†’ Π‘Π»Π΅Π΄ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚Π½Π°Ρ‚Π° вСрсия Π½Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π°, Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π°Ρ‚Π° ΠΊΠ½ΠΈΠ³Π° Ρ‰Π΅ бъдС ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½Π° Π½Π° ΠΈΠΌΠ΅ΠΉΠ».

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

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