Книга Β«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<String, ShareVolume>. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΈΠ³Ρ€Π°Π΅Ρ‚ 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 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ понятиС сСансовых ΠΎΠΊΠΎΠ½. МСньший сСанс Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒΡΡ с сСансом слСва ΠΎΡ‚ Π½Π΅Π³ΠΎ. А сСанс справа Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ слСдуСт Π·Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠΌ бСздСйствия. БСансовыС ΠΎΠΊΠ½Π° ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° дСйствиях ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ· записСй для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ сСансу относится запись.

Книга «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='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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ