ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅" Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Habrites! Π’Π°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π° Π΅ подходяща Π·Π° всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ иска Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π° стрийминг. Π Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ 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, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ смС постигнали. Π’Π°Π·ΠΈ топология трябва Π΄Π° Π²ΠΈ Π΅ ΠΏΠΎΠ·Π½Π°Ρ‚Π° досСга.

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
НСка сСга Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π·Π° Ρ‚Π°Π·ΠΈ топология (ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Бписък 5.2).

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Горният ΠΊΠΎΠ΄ сС ΠΎΡ‚Π»ΠΈΡ‡Π°Π²Π° със своята краткост ΠΈ голям ΠΎΠ±Π΅ΠΌ ΠΎΡ‚ дСйствия, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½ΠΈ Π² няколко Ρ€Π΅Π΄Π°. МоТС Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Π½ΠΎΠ²ΠΎ Π² ΠΏΡŠΡ€Π²ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° 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).

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

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

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

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

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

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

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’Π΅Ρ‡Π΅ стС Π²ΠΈΠΆΠ΄Π°Π»ΠΈ извиквания към groupBy ΠΈ mapValues, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π΄Π° сС спирамС Π½Π° тях (ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° KTable.toStream, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ KTable.print Π΅ остарял). Но всС ΠΎΡ‰Π΅ Π½Π΅ стС Π²ΠΈΠΆΠ΄Π°Π»ΠΈ KTable вСрсията Π½Π° aggregate(), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ ΠΎΡ‚Π΄Π΅Π»ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΎΠ±ΡΡŠΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΉ.

ΠšΠ°ΠΊΡ‚ΠΎ си спомнятС, KTable Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΏΠΎ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ записитС със ΡΡŠΡ‰ΠΈΡ ΠΊΠ»ΡŽΡ‡ сС считат Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. KTable замСня стария запис с новия. АгрСгиранСто Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½: Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ‚Π΅ записи с Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡ сС ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°Ρ‚. ΠšΠΎΠ³Π°Ρ‚ΠΎ пристигнС запис, Ρ‚ΠΎΠΉ сС добавя към СкзСмпляр Π½Π° класа FixedSizePriorityQueue с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ‚Π΅Π» (вторият ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° агрСгатния ΠΌΠ΅Ρ‚ΠΎΠ΄), Π½ΠΎ Π°ΠΊΠΎ Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π΄Ρ€ΡƒΠ³ запис със ΡΡŠΡ‰ΠΈΡ ΠΊΠ»ΡŽΡ‡, Ρ‚ΠΎΠ³Π°Π²Π° старият запис сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° subtractor (трСтият ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° агрСгатния ΠΌΠ΅Ρ‚ΠΎΠ΄).

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

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

  • Π³Ρ€ΡƒΠΏΠΈΡ€Π° стойноститС Π² KTable ΠΏΠΎ тСхния ΠΎΠ±Ρ‰ ΠΊΠ»ΡŽΡ‡;
  • ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΡŠΡ€Ρ…Ρƒ Ρ‚Π΅Π·ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½ΠΈ стойности, ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅.

Π”Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, Π΄Π²ΠΈΠΆΠ΅Ρ‰ΠΈ сС ΠΏΡ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Kafka Streams ΠΈ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²Π° информация ΠΏΡ€Π΅Π΄Π°Π²Π°.

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

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅ - Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ‡Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (windowing operations).

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

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

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

ΠŸΡ€Π΅Π±Ρ€ΠΎΡΠ²Π°Π½Π΅ Π½Π° борсови Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡

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

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

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

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

Вопологията Π½Π° Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ проста, Π½ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»Π½Π°Ρ‚Π° ΠΌΡƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π½Π΅ Π²Ρ€Π΅Π΄ΠΈ. НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ„ΠΈΠ³. 5.11.

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

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

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

Има Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π² Kafka Streams:

  • сСсия;
  • "Ρ‚ΡƒΠΌΠ±Π»ΠΈΠ½Π³" (Ρ‚ΡƒΠΌΠ±Π»ΠΈΠ½Π³);
  • плъзганС / "скачанС" (плъзганС / подскачанС).

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

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

ΠŸΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π½Π° сСсии

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

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

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

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

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

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

Всяка опСрация groupBy ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ изпълнява някакъв Π²ΠΈΠ΄ опСрация Π·Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ (ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°Π½Π΅, ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ прСброяванС). ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΈΠ²Π½ΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ с ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° записитС Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΄Π°Π΄Π΅Π½ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†.

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

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

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

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

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

1. Запис 1 пристига ΠΏΡ€ΡŠΠ², Ρ‚Π°ΠΊΠ° Ρ‡Π΅ началният час Π΅ Ρ€Π°Π²Π΅Π½ Π½Π° крайния ΠΈ Π΅ 00:00:00.

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

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

4. ΠŸΡ€ΠΈΡΡ‚ΠΈΠ³Π° запис 4 ΠΈ Ρ‚ΡŠΡ€ΡΠΈΠΌ сСсии ΠΌΠ΅ΠΆΠ΄Ρƒ 23:59:45 ΠΈ 00:00:25. Π’ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ са Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ ΠΈ Π΄Π²Π΅Ρ‚Π΅ сСсии - 1 ΠΈ 2. И Ρ‚Ρ€ΠΈΡ‚Π΅ сСсии са ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ Π² Π΅Π΄Π½Π°, с Π½Π°Ρ‡Π°Π»Π΅Π½ час 00:00:00 ΠΈ ΠΊΡ€Π°Π΅Π½ час 00:00:15.

Π•Ρ‚ΠΎ някои Π²Π°ΠΆΠ½ΠΈ Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π»:

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

По-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ обсъдим слСдващия Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ - "Ρ‚ΡŠΡ€ΠΊΠ°Π»ΡΡ‰ΠΈ сС" ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ.

"Π’ΡŠΡ€ΠΊΠ°Ρ‰ΠΈ сС" ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

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

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

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

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

Най-накрая Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към послСдната ΠΎΡ‚ ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π°, прСскачащи ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ.

ΠŸΠ»ΡŠΠ·Π³Π°Ρ‰ΠΈ сС ("скачащи") ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ

ΠŸΠ»ΡŠΠ·Π³Π°Ρ‰ΠΈΡ‚Π΅ сС/скачащи ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ са ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° ΠΏΠ°Π΄Π°Ρ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ, Π½ΠΎ с ΠΌΠ°Π»ΠΊΠ° Ρ€Π°Π·Π»ΠΈΠΊΠ°. ΠŸΠ»ΡŠΠ·Π³Π°Ρ‰ΠΈΡ‚Π΅ сС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ Π½Π΅ Ρ‡Π°ΠΊΠ°Ρ‚ Π΄Π° ΠΈΠ·Ρ‚Π΅Ρ‡Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ Π½ΠΎΠ² ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΡΠΊΠΎΡ€ΠΎΡˆΠ½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Π’Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π½ΠΎΠ²ΠΈ изчислСния слСд ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅, ΠΏΠΎ-малък ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π°.

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

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Листинг 5.7 ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠΎΠ΄Π° Π·Π° настройка Π½Π° ΠΏΠ»ΡŠΠ·Π³Π°Ρ‰ΠΈ сС ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ (Π½Π°ΠΌΠΈΡ€Π° сС Π² src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

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

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

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

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

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

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

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

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

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

ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° KTable Π² KStream

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

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

НиС Ρ‰Π΅ Π²Π΅Ρ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва (ΠΊΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Бписък 5.8).

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

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

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

Π—Π° щастиС, Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄ ΠΊΠΎΠ΄ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ Π·Π° създаванС Π½Π° KTable ΠΎΠ±Π΅ΠΊΡ‚ (Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (списък 5.9).

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π‘Ρ‚Ρ€ΡƒΠ²Π° си Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π½Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Serde, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½ΠΈΠ·ΡŠΡ‚ Serde сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² настройкитС. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° НАЙ-РАННОВО изброяванС, Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° сС попълва със записи Π² самото Π½Π°Ρ‡Π°Π»ΠΎ.

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

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π½ΠΎΠ²ΠΈΠ½ΠΈ с Π΄Π°Π½Π½ΠΈ Π·Π° броя Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅

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

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
Π’ΠΎΠ·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 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-5 (ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² src/main/java/bbejeck/chapter_XNUMX/GlobalKTableExample.java) ΠΈ Ρ‰Π΅ Π³ΠΎ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡ‚Π° GlobalKTable.

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"
ОбсъТдали смС Ρ‚ΠΎΠ²Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π΄Π° сС повтарям. Но ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ във функцията toStream().map Π΅ абстрахиран във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚ Π·Π° чСтимост вмСсто Π²Π³Ρ€Π°Π΄Π΅Π½ Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·Ρ€Π°Π·.

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

ΠšΠ½ΠΈΠ³Π°Ρ‚Π° β€žΠšΠ°Ρ„ΠΊΠ° ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π² дСйствиС. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ микроуслуги Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅"

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ‚Π΅ΠΌΠΈΡ‚Π΅ са описани с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅.

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

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

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Π³ΠΎΡ€Π½Π°Ρ‚Π° опСрация Π·Π° ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ:

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

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

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

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

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

5.3.5. Изисквано ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅

Π˜Π·Π²ΡŠΡ€ΡˆΠ²Π°Π»ΠΈ смС няколко ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ със ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΈ ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ смС рСгистрирали Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° (Π·Π° Ρ†Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°) ΠΈΠ»ΠΈ смС Π³ΠΈ рСгистрирали Π² Ρ‚Π΅ΠΌΠ° (Π·Π° Ρ†Π΅Π»ΠΈΡ‚Π΅ Π½Π° производството). ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π² Ρ‚Π΅ΠΌΠ°, трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Kafka ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», Π·Π° Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅.

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

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

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π²Π°ΠΆΠ½Π°. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ прилоТСния Π·Π° Ρ‚Π°Π±Π»ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Π±Π΅Π· Π΄Π° сС Π½Π°Π»Π°Π³Π° ΠΏΡŠΡ€Π²ΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° Kafka. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° повишава СфСктивността Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° записватС ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π°Π½Π½ΠΈ:

  • ΠΏΠΎΡ€Π°Π΄ΠΈ локалността Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π±ΡŠΡ€Π·ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ;
  • Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π΅ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Π½Π΅ сС записват във външна ΠΏΠ°ΠΌΠ΅Ρ‚.

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

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

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅

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

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

β†’ ΠŸΠΎΠ²Π΅Ρ‡Π΅ подробности Π·Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° уСбсайт Π½Π° издатСля

β†’ Π—Π° Khabrozhiteli 25% ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ ΠΊΡƒΠΏΠΎΠ½Π° - ΠŸΠΎΡ‚ΠΎΡ†ΠΈ Π½Π° ΠšΠ°Ρ„ΠΊΠ°

β†’ ΠŸΡ€ΠΈ Π·Π°ΠΏΠ»Π°Ρ‰Π°Π½Π΅ Π½Π° Ρ…Π°Ρ€Ρ‚ΠΈΠ΅Π½Π°Ρ‚Π° вСрсия Π½Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π°, Π½Π° Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π°Ρ‚Π° ΠΏΠΎΡ‰Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° ΠΊΠ½ΠΈΠ³Π°.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€