ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli" Aloha mai e nā kamaʻāina ʻo Khabro! He mea kūpono kēia puke no kēlā me kēia mea hoʻomohala e makemake ana e hoʻomaopopo i ka hana ʻana o ka milo. ʻO ka hoʻomaopopo ʻana i nā polokalamu hoʻolaha e kōkua iā ʻoe e hoʻomaopopo maikaʻi iā Kafka a me Kafka Streams. He mea maikaʻi ke ʻike i ka framework Kafka ponoʻī, akā ʻaʻole pono kēia: ​​E haʻi wau iā ʻoe i nā mea āpau āu e pono ai. E aʻo nā mea hoʻomohala ʻike Kafka a me nā mea hou i ka hana ʻana i nā noi hoʻoheheʻe kahawai hoihoi me ka hoʻohana ʻana i ka waihona Kafka Streams ma kēia puke. E aʻo nā mea hoʻomohala Java waena a holomua i nā manaʻo e like me ka serialization e hoʻohana i kā lākou mau mākaukau e hana i nā noi Kafka Streams. Ua kākau ʻia ke code kumu o ka puke ma Java 8 a hoʻohana nui i ka Java 8 lambda expression syntax, no laila e hiki mai ana ka ʻike pehea e hana ai me nā hana lambda (ʻoiai ma kahi ʻōlelo papahana ʻē aʻe).

Wehewehe. 5.3. ʻO ka hui a me nā hana puka makani

Ma kēia ʻāpana, e neʻe mākou e ʻimi i nā ʻāpana maikaʻi loa o Kafka Streams. I kēia manawa ua uhi mākou i nā ʻano o Kafka Streams:

  • ka hana ʻana i kahi topology hana;
  • ka hoʻohana ʻana i ka mokuʻāina i nā noi streaming;
  • ka hana ʻana i nā pili kahawai ʻikepili;
  • ʻokoʻa ma waena o nā kahawai hanana (KStream) a me nā kahawai hou (KTable).

Ma nā hiʻohiʻona aʻe e hui pū mākou i kēia mau mea āpau. E aʻo nō hoʻi ʻoe e pili ana i ka windowing, kekahi hiʻohiʻona maikaʻi o nā noi streaming. ʻO kā mākou hiʻohiʻona mua he hōʻuluʻulu maʻalahi.

5.3.1. ʻO ka hōʻuluʻulu ʻana o ke kūʻai aku ʻana ma ka ʻoihana

ʻO ka hui ʻana a me ka hui pū ʻana he mau mea hana koʻikoʻi i ka wā e hana ana me ka ʻikepili streaming. ʻAʻole lawa ka nānā ʻana i nā moʻolelo pākahi i ka loaʻa ʻana. No ka unuhiʻana i nāʻike hou mai kaʻikepili, pono e hui a hoʻohui iā lākou.

Ma kēia hiʻohiʻona, e hoʻokomo ʻoe i ka lole o kahi mea kālepa lā e pono ai ke nānā i ka nui o ke kūʻai ʻana o nā ʻoihana o nā ʻoihana i kekahi mau ʻoihana. ʻO ke kikoʻī, makemake ʻoe i nā hui ʻelima me ka nui o nā kūʻai kūʻai ʻana i kēlā me kēia ʻoihana.

Pono ia hui ʻana i kēia mau ʻanuʻu e unuhi i ka ʻikepili i loko o ke ʻano i makemake ʻia (e ʻōlelo ana i nā huaʻōlelo maʻamau).

  1. E hana i kahi kumu kumuhana e hoʻolaha ana i ka ʻike kālepa waiwai. Pono mākou e palapala i kahi mea o ke ʻano StockTransaction i kahi mea o ke ʻano ShareVolume. ʻO ka manaʻo, aia ka mea StockTransaction i metadata kūʻai, akā pono mākou i ka ʻikepili e pili ana i ka helu o nā ʻāpana i kūʻai ʻia.
  2. Hui pū i ka ʻikepili ShareVolume ma ka hōʻailona waihona. Ke hui pū ʻia e ka hōʻailona, ​​hiki iā ʻoe ke hoʻohiolo i kēia ʻikepili i nā subtotal o nā puke kūʻai waiwai. Pono e hoʻomaopopo i ka hoʻihoʻi ʻana o ke ʻano KStream.groupBy i kahi laʻana o ke ʻano KGroupedStream. A hiki iā ʻoe ke loaʻa kahi hiʻohiʻona KTable ma ke kāhea hou ʻana i ke ʻano KGroupedStream.reduce.

He aha ke kikowaena KGroupedStream

Hoʻihoʻi nā ʻano hana KStream.groupBy a me KStream.groupByKey i kahi laʻana o KGroupedStream. ʻO KGroupedStream kahi hōʻike waena o kahi kahawai o nā hanana ma hope o ka hui ʻana e nā kī. ʻAʻole i manaʻo ʻia no ka hana pololei me ia. Ma kahi, hoʻohana ʻia ʻo KGroupedStream no nā hana hōʻuluʻulu, e hopena mau i kahi KTable. A no ka mea he KTable ka hopena o nā hana hoʻohui a hoʻohana lākou i kahi hale kūʻai mokuʻāina, ʻaʻole hiki ke hoʻouna hou ʻia nā mea hou a pau ma muli o ka pipeline.

Hoʻihoʻi ka KTable.groupBy i kahi KGroupedTable like - he hōʻike waena o ke kahawai o nā mea hou, i hui hou ʻia e ke kī.

E hoomaha iki kakou a nana i ka Fig. 5.9, e hōʻike ana i nā mea i loaʻa iā mākou. Ua kama'āina loa kēia topology iā ʻoe.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
E nānā kākou i ke code no kēia topology (hiki ke loaʻa ma ka faila src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Listing 5.2).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Hoʻokaʻawale ʻia ka code i hāʻawi ʻia e kona pōkole a me ka nui o nā hana i hana ʻia ma nā laina he nui. Hiki iā ʻoe ke ʻike i kahi mea hou ma ka ʻāpana mua o ke ʻano builder.stream: kahi waiwai o ke ʻano enum AutoOffsetReset.EARLIEST (aia kekahi LATEST), hoʻonohonoho ʻia me ke ʻano Consumed.withOffsetResetPolicy. Hiki ke hoʻohana ʻia kēia ʻano helu helu no ka wehewehe ʻana i kahi hoʻolālā hoʻihoʻi offset no kēlā me kēia KStream a i ʻole KTable a ʻoi aku ka mua ma mua o ke koho hoʻonohonoho offset mai ka hoʻonohonoho.

GroupByKey a me GroupBy

ʻElua mau ala no ka hui pū ʻana i nā moʻolelo: GroupByKey a me GroupBy. Hoʻihoʻi ʻelua i kahi KGroupedTable, no laila e noʻonoʻo paha ʻoe i ka ʻokoʻa ma waena o lākou a i ka wā hea e hoʻohana ai?

Hoʻohana ʻia ke ʻano GroupByKey inā ʻaʻole nele nā ​​kī i ka KStream. A ʻo ka mea nui loa, ʻaʻole i hoʻonohonoho ʻia ka hae "koi hoʻokaʻawale".

Ke manaʻo nei ke ʻano GroupBy ua hoʻololi ʻoe i nā kī hui, no laila ua hoʻonohonoho ʻia ka hae repartition i ʻoiaʻiʻo. ʻO ka hoʻokō ʻana i nā hui, nā hui, a me nā mea ʻē aʻe ma hope o ke ʻano GroupBy e hopena i ka hoʻokaʻawale hou ʻana.
Hōʻuluʻulu manaʻo: Inā hiki, pono ʻoe e hoʻohana i GroupByKey ma mua o GroupBy.

Ua maopopo ka hana a ka mapValues ​​​​a me groupBy, no laila e nānā kākou i ke ʻano sum() (loaʻa ma src/main/java/bbejeck/model/ShareVolume.java) (Listing 5.3).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Hoʻihoʻi ke ʻano ShareVolume.sum i ka huina holo o ka nui o nā mea kūʻai aku, a ʻo ka hopena o ke kaulahao holoʻokoʻa he mea KTable. . I kēia manawa maopopo iā ʻoe ke kuleana o KTable. Ke hōʻea mai nā mea ShareVolume, mālama ka mea KTable pili i ka mea hou o kēia manawa. Pono e hoʻomanaʻo e ʻike ʻia nā mea hou a pau i ka shareVolumeKTable mua, akā ʻaʻole hoʻouna ʻia nā mea a pau.

A laila hoʻohana mākou i kēia KTable e hōʻuluʻulu (ma ka helu o nā ʻāpana i kālepa ʻia) e hōʻea i nā hui ʻelima me ka nui o nā ʻāpana i kālepa ʻia i kēlā me kēia ʻoihana. ʻO kā mākou mau hana i kēia hihia e like me nā mea no ka hui mua.

  1. Hana i kahi hana groupBy e hui pū i kēlā me kēia mea ShareVolume e ka ʻoihana.
  2. Hoʻomaka e hōʻuluʻulu i nā mea ShareVolume. I kēia manawa, ʻo ka mea hōʻuluʻulu he pila paʻa ka nui. Ma kēia pila paʻa, ʻo nā hui ʻelima wale nō me ka nui o nā ʻāpana i kūʻai ʻia e mālama ʻia.
  3. Palapala ʻāina i nā pila mai ka paukū mua i kahi waiwai kaula a e hoʻihoʻi i nā ʻelima ʻoi loa i kālepa ʻia ma ka helu e ka ʻoihana.
  4. E kākau i nā hopena ma ke ʻano kaula i ke kumuhana.

Ma Fig. Hōʻike ke kiʻi 5.10 i ka pakuhi topology kahe ʻikepili. E like me kāu e ʻike ai, maʻalahi loa ka lua o ka hana.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
I kēia manawa ua ʻike maopopo mākou i ke ʻano o kēia kaʻina hana ʻelua, hiki iā mākou ke huli i kāna code kumu (e ʻike ʻoe ma ka faila src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Listing 5.4) .

Loaʻa i kēia mea hoʻomaka kahi ʻano hoʻololi paʻa. He mea maʻamau kēia i hoʻopili ʻia no java.util.TreeSet i hoʻohana ʻia no ka hahai ʻana i nā hopena N kiʻekiʻe ma ka papa iho o nā ʻāpana i kālepa ʻia.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Ua ʻike mua ʻoe i nā kelepona groupBy a me mapValues, no laila, ʻaʻole mākou e komo i loko o ia mau mea (ke kāhea nei mākou i ke ʻano KTable.toStream no ka mea ua pau ke ala KTable.print). Akā ʻaʻole ʻoe i ʻike i ka mana KTable o aggregate() i kēia manawa, no laila e hoʻolōʻihi mākou i ke kūkākūkā ʻana i kēlā.

Ke hoʻomanaʻo nei ʻoe, ʻo ka mea e ʻokoʻa ai ʻo KTable ʻo ia nā moʻolelo me nā kī like i manaʻo ʻia he mea hou. Hoʻololi ʻo KTable i ke komo kahiko me kahi mea hou. Hana ʻia ka hui ʻana ma ke ʻano like: ua hōʻuluʻulu ʻia nā moʻolelo hou loa me ke kī like. Ke hiki mai kahi mooolelo, hoʻohui ʻia ia i ka papa FixedSizePriorityQueue me ka hoʻohana ʻana i kahi mea hoʻohui (ka hoʻohālikelike ʻelua i ke kaʻina hana aggregate), akā inā aia kekahi moʻolelo me ke kī hoʻokahi, a laila wehe ʻia ka moʻolelo kahiko me ka hoʻohana ʻana i kahi subtractor. ke kahea ala hui).

ʻO kēia ke ʻano o kā mākou aggregator, FixedSizePriorityQueue, ʻaʻole ia e hōʻuluʻulu i nā waiwai āpau me hoʻokahi kī, akā mālama i ka huina neʻe o ka nui o nā ʻano waiwai kūʻai nui loa. Loaʻa i kēlā me kēia helu komo ka huina o nā ʻāpana i kūʻai ʻia i kēia manawa. E hāʻawi ʻo KTable iā ʻoe i ka ʻike e pili ana i nā ʻāpana o nā ʻoihana i kēia manawa i kālepa nui ʻia, me ka ʻole o ka koi ʻana i ka hui ʻana o kēlā me kēia mea hou.

Ua aʻo mākou e hana i ʻelua mau mea nui:

  • nā waiwai hui ma KTable e kahi kī maʻamau;
  • hana i nā hana pono e like me ka ʻōwili a me ka hōʻuluʻulu ʻana i kēia mau waiwai i hui pū ʻia.

He mea nui ka ʻike i ka hana ʻana i kēia mau hana no ka hoʻomaopopo ʻana i ke ʻano o ka neʻe ʻana o ka ʻikepili ma o kahi noi Kafka Streams a me ka hoʻomaopopo ʻana i ka ʻike e lawe ai.

Ua hōʻuluʻulu pū mākou i kekahi o nā manaʻo nui i kūkākūkā mua ʻia ma kēia puke. Ma ka Mokuna 4, ua kūkākūkā mākou i ka mea nui o ka ʻae ʻana i ka hewa, ka mokuʻāina kūloko no kahi noi streaming. Ua hōʻike ka laʻana mua ma kēia mokuna i ke kumu nui o ka mokuʻāina kūloko—e hāʻawi iā ʻoe i ka hiki ke mālama i ka ʻike āu i ʻike ai. ʻAʻole ke komo kūloko i ka lohi o ka pūnaewele, e hoʻokō i ka hana a me ka pale hewa.

I ka hana ʻana i ka ʻōwili a i ʻole ka hoʻohui ʻana, pono ʻoe e kuhikuhi i ka inoa o ka hale kūʻai mokuʻāina. Hoʻihoʻi ka hana ʻōwili a me ka hui ʻana i kahi laʻana KTable, a hoʻohana ka KTable i ka waiho mokuʻāina e hoʻololi i nā hopena kahiko me nā mea hou. E like me kāu i ʻike ai, ʻaʻole i hoʻouna ʻia nā mea hou a pau i ka pipeline, a he mea nui kēia no ka mea ua hoʻolālā ʻia nā hana aggregation e hana i ka ʻike hōʻuluʻulu. Inā ʻaʻole ʻoe e hoʻohana i ka mokuʻāina kūloko, e hoʻouna ʻo KTable i nā hopena hōʻuluʻulu a ʻōwili ʻia.

Ma hope aʻe, e nānā mākou i ka hana ʻana i nā hana e like me ka hōʻuluʻulu ʻana i loko o kahi manawa kikoʻī - ka mea i kapa ʻia ʻo windowing operations.

5.3.2. Nā hana puka makani

Ma ka ʻāpana mua, ua hoʻolauna mākou i ka convolution sliding a me ka hoʻohui. Ua hoʻokō ka palapala noi i ka ʻōwili mau ʻana o ka nui o nā mea kūʻai aku, a ukali ʻia e ka hōʻuluʻulu ʻana o nā kumukūʻai ʻelima i kālepa nui ʻia ma ka hoʻololi.

I kekahi manawa, pono ka hoʻohui mau ʻana a me ka ʻōwili ʻia o nā hopena. A i kekahi manawa pono ʻoe e hana i nā hana ma luna o kahi manawa i hāʻawi ʻia. No ka laʻana, e helu i ka nui o nā hana hoʻololi i hana ʻia me nā ʻāpana o kekahi hui i nā minuke 10 i hala. A i ʻole ehia mau mea hoʻohana i kaomi i kahi hae hoʻolaha hou i nā minuke 15 i hala. Hiki i kekahi noi ke hana i ia mau hana i nā manawa he nui, akā me nā hopena e pili wale ana i nā manawa i ʻōlelo ʻia (windows manawa).

Ka helu ʻana i nā hana hoʻololi e ka mea kūʻai aku

Ma ka laʻana hou aʻe, e nānā mākou i nā kālepa waiwai ma waena o nā mea kālepa he nui-ʻo nā hui nui a i ʻole nā ​​​​mea kālā hoʻokahi akamai.

ʻElua kumu kūpono no kēia ʻimi ʻana. ʻO kekahi o lākou ka pono e ʻike i nā mea a nā alakaʻi mākeke e kūʻai / kūʻai aku nei. Inā ʻike kēia mau mea pāʻani nui a me nā mea hoʻopukapuka maʻalahi i ka manawa, kūpono ke hahai i kā lākou hoʻolālā. ʻO ke kumu ʻelua, ʻo ia ka makemake e ʻike i nā hōʻailona hiki ke kūʻai ʻole ʻia. No ka hana ʻana i kēia, pono ʻoe e nānā i ka correlation o nā spike kūʻai nui me nā hoʻolaha paʻi koʻikoʻi.

ʻO ia ka nānā ʻana i nā ʻanuʻu aʻe:

  • ka hana ʻana i kahawai no ka heluhelu ʻana mai ke kumuhana kūʻai kūʻai;
  • ka hui pū ʻana i nā moʻolelo e hiki mai ana e ka mea kūʻai aku a me ka hōʻailona waiwai. Ke kāhea ʻana i ke ala groupBy e hoʻihoʻi i kahi laʻana o ka papa KGroupedStream;
  • Hoʻihoʻi ke ala KGroupedStream.windowedBy i kahi kahawai ʻikepili i kaupalena ʻia i ka puka makani manawa, kahi e hiki ai i ka hōʻuluʻulu puka makani. Ma muli o ke ʻano puka makani, hoʻihoʻi ʻia kahi TimeWindowedKStream a i ʻole SessionWindowedKStream;
  • helu kalepa no ka hana aggregation. Hoʻoholo ka kahe ʻikepili puka makani inā mālama ʻia kekahi moʻolelo ma kēia helu;
  • kākau i nā hualoaʻa i kekahi kumuhana a i ʻole ka hoʻopuka ʻana iā lākou i ka console i ka wā o ka hoʻomohala ʻana.

He maʻalahi ka topology o kēia noi, akā kōkua ke kiʻi akaka o ia mea. E nānā kākou i ka Fig. 5.11.

A laila, e nānā mākou i ka hana o nā hana puka makani a me ke code pili.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"

ʻAno pukaaniani

ʻEkolu ʻano puka makani ma Kafka Streams:

  • kauā;
  • “tumbling” (tumbling);
  • ʻōheʻe / lele.

ʻO kahi e koho ai e pili ana i kāu mau koi ʻoihana. ʻO nā puka makani hāʻule a me ka lele ʻana he palena manawa, ʻoiai ua kaupalena ʻia nā puka makani kau e ka hana o ka mea hoʻohana—e hoʻoholo ʻia ka lōʻihi o ke kau (mau) ma muli o ka ikaika o ka mea hoʻohana. ʻO ka mea nui e hoʻomanaʻo, ʻo nā ʻano puka makani āpau e pili ana i ka lā / manawa o nā mea hoʻokomo, ʻaʻole ka manawa o ka ʻōnaehana.

A laila, hoʻokō mākou i kā mākou topology me kēlā me kēia ʻano pukaaniani. E hāʻawi ʻia ke code piha ma ka laʻana mua wale nō; no nā ʻano ʻē aʻe o nā puka makani ʻaʻohe mea e loli koe ke ʻano o ka hana pukaaniani.

Nā puka makani kau

He ʻokoʻa loa nā puka makani hālāwai mai nā ʻano puka makani ʻē aʻe. ʻAʻole i kaupalena ʻia lākou e ka manawa e like me ka hana a ka mea hoʻohana (a i ʻole ka hana o ka hui āu e makemake ai e hahai). Hoʻokaʻawale ʻia nā puka makani hālāwai e nā wā hana ʻole.

Hōʻike ka Figure 5.12 i ka manaʻo o nā puka makani kau. E hoʻohui ʻia ke kau liʻiliʻi me ke kau ma kona hema. A e kaʻawale ka hālāwai ma ka ʻākau no ka mea e hahai ana i ka wā lōʻihi o ka hana ʻole. Hoʻokumu ʻia nā puka makani Session ma ka hana o ka mea hoʻohana, akā e hoʻohana i nā peʻa lā/manawa mai nā mea i hoʻokomo ʻia e hoʻoholo ai i ke kau hea kahi i komo ai.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"

Ke hoʻohana nei i nā puka makani session e nānā i nā kālepa waiwai

E hoʻohana kākou i nā puka makani session e hopu i ka ʻike e pili ana i nā kālepa hoʻololi. Hōʻike ʻia ka hoʻokō ʻana o nā puka makani ma ka Listing 5.5 (hiki ke loaʻa ma src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Ua ʻike mua ʻoe i ka hapa nui o nā hana ma kēia topology, no laila ʻaʻohe pono e nānā hou iā lākou ma aneʻi. Akā aia kekahi mau mea hou ma aneʻi, a mākou e kūkākūkā ai i kēia manawa.

Hana maʻamau kēlā me kēia hana groupBy i kekahi ʻano hana hōʻuluʻulu (hui, ʻōwili, a helu ʻana paha). Hiki iā ʻoe ke hana i ka hōʻuluʻulu kumulative me ka huina holo, a i ʻole ka hōʻuluʻulu puka makani, e mālama ana i nā moʻolelo i loko o kahi puka aniani i ʻōlelo ʻia.

ʻO ke code ma Listing 5.5 e helu i ka helu o nā hana i loko o nā puka makani. Ma Fig. 5.13 ʻIke ʻia kēia mau hana i kēlā me kēia pae.

Ma ke kāhea ʻana iā windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)) hana mākou i ka puka aniani me ka wā hana ʻole o 20 kekona a me kahi manawa hoʻomau o 15 mau minuke. ʻO ka wā ʻole o 20 kekona, ʻo ia hoʻi, e komo ka palapala noi i kekahi komo i hiki mai i loko o 20 kekona o ka hopena a i ʻole ka hoʻomaka ʻana o ke kau o kēia manawa i ke kau o kēia manawa.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
A laila, kuhikuhi mākou i ka hana aggregation e pono e hana ʻia ma ka puka aniani - i kēia hihia, helu. Inā hāʻule kahi komo komo ma waho o ka puka makani hana ʻole (ma kēlā me kēia ʻaoʻao o ka peʻa lā/manawa), hana ka noi i kahi kau hou. ʻO ka wā paʻa ka manaʻo o ka mālama ʻana i kahi kau no kekahi manawa a hiki i ka ʻikepili lohi e lōʻihi ma mua o ka manawa hana ʻole o ke kau akā hiki ke hoʻopili ʻia. Hoʻohui hou, ʻo ka hoʻomaka a me ka hopena o ke kau hou i loaʻa mai ka hui ʻana e pili ana i ka lā mua a me ka hōʻailona lā/manawa hou loa.

E nānā i kekahi mau mea komo mai ke ʻano helu e ʻike ai i ka hana ʻana o nā kau (Pakaukau 5.1).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Ke hiki mai nā moʻolelo, ʻimi mākou i nā kau e kū nei me ke kī hoʻokahi, ka manawa pau i emi iho ma mua o ka lā/manawa i kēia manawa - ka wā ʻole o ka hana, a me ka manawa hoʻomaka ʻoi aku ka nui ma mua o ka lā/manawa stamp + wā hana ʻole. Ma ka noʻonoʻo ʻana i kēia, ʻehā mau helu mai ka papa ʻaina. Hoʻohui ʻia ʻo 5.1 i hoʻokahi kau e like me kēia.

1. Hoʻopaʻa mua ka 1, no laila ua like ka manawa hoʻomaka me ka manawa hope a ʻo 00:00:00.

2. A laila, hiki mai ka helu 2, a ke ʻimi nei mākou i nā kau e pau ʻole ma mua o 23:59:55 a hoʻomaka ʻaʻole ma hope o 00:00:35. Loaʻa iā mākou ka moʻolelo 1 a hui pū i nā manawa 1 a me 2. Lawe mākou i ka manawa hoʻomaka o ke kau 1 (ma mua) a me ka manawa hope o ke kau 2 (ma hope), no laila e hoʻomaka kā mākou hui hou ma 00:00:00 a pau i ka 00: 00:15.

3. Hoʻopaʻa 3 hiki mai, ʻimi mākou i nā manawa ma waena o 00:00:30 a me 00:01:10 a ʻaʻole loaʻa kekahi. E hoʻohui i kahi kau lua no ke kī 123-345-654, FFBE, e hoʻomaka a hoʻopau ma 00:00:50.

4. Hōʻea mai ka moʻolelo 4 a ke ʻimi nei mākou i nā kau ma waena o 23:59:45 a me 00:00:25. I kēia manawa ua loaʻa nā manawa ʻelua 1 a me 2. Hoʻohui ʻia nā hui ʻekolu i hoʻokahi, with a start time of 00:00:00 and an end time of 00:00:15.

Mai ka mea i wehewehe ʻia ma kēia ʻāpana, pono e hoʻomanaʻo i kēia mau nuances koʻikoʻi:

  • ʻAʻole nā ​​puka makani paʻa ka nui. Hoʻoholo ʻia ka lōʻihi o kahi kau e ka hana i loko o kahi manawa i hāʻawi ʻia;
  • ʻO ka lā/manawa peʻa i ka ʻikepili e hoʻoholo ai inā hāʻule ka hanana i loko o kahi kau e kū nei a i ʻole i ka wā hana ʻole.

A laila e kūkākūkā mākou i ke ʻano o ka puka makani - "tumbling" windows.

"Holo" pukaaniani

Hoʻopaʻa nā puka makani hāʻule i nā hanana i hāʻule i loko o kekahi manawa. E noʻonoʻo pono ʻoe e hopu i nā kālepa waiwai āpau o kekahi hui i kēlā me kēia 20 kekona, no laila e hōʻiliʻili ʻoe i nā hanana āpau i kēlā manawa. I ka pau ʻana o ka manawa 20-kekona, ʻōwili ka puka makani a neʻe i kahi manawa nānā hou 20-kekona. Hōʻike ka 5.14 i kēia kūlana.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
E like me kāu e ʻike ai, hoʻokomo ʻia nā hanana āpau i loaʻa i nā kekona 20 hope loa i ka puka makani. I ka pau ʻana o kēia manawa, hana ʻia kahi puka aniani hou.

Hōʻike ka papa inoa ʻo 5.6 i nā code e hōʻike ana i ka hoʻohana ʻana i nā puka aniani e hopu ai i nā kālepa waiwai i kēlā me kēia 20 kekona (loaʻa ma src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Me kēia hoʻololi liʻiliʻi i ka TimeWindows.of method call, hiki iā ʻoe ke hoʻohana i ka puka aniani. ʻAʻole kāhea kēia laʻana i ke ala a hiki i (), no laila e hoʻohana ʻia ka wā paʻa paʻa o 24 mau hola.

ʻO ka hope, ʻo ka manawa kēia e neʻe ai i ka hope o nā koho puka makani - "hopping" windows.

Nā puka makani heʻe ("lele".

Ua like nā puka makani hoʻoheheʻe/hopping me nā puka makani hāʻule, akā me ka ʻokoʻa iki. ʻAʻole e kali nā puka aniani a hiki i ka pau ʻana o ka manawa ma mua o ka hana ʻana i kahi puka makani hou e hoʻoponopono ai i nā hanana hou. Hoʻomaka lākou i nā helu hou ma hope o ke kali ʻana ma lalo o ka lōʻihi o ka puka makani.

No ka hōʻike ʻana i ka ʻokoʻa ma waena o ka hāʻule ʻana a me ka lele ʻana i nā puka makani, e hoʻi kākou i ka laʻana o ka helu ʻana i nā kālepa kūʻai kālā. ʻO kā mākou pahuhopu ka helu ʻana i ka helu o nā kālepa, akā ʻaʻole makemake mākou e kali i ka manawa holoʻokoʻa ma mua o ka hoʻonui ʻana i ka counter. Akā, e hōʻano hou mākou i ka counter i nā manawa pōkole. No ka laʻana, e helu mākou i ka helu o nā hana i kēlā me kēia 20 kekona, akā e hoʻonui i ka counter i kēlā me kēia 5 kekona, e like me ka hōʻike ʻana ma ka Fig. 5.15. I kēia hihia, hoʻopau mākou i ʻekolu puka makani me ka ʻikepili overlapping.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Hōʻike ka papa inoa 5.7 i ke code no ka wehewehe ʻana i nā puka makani sliding (loaʻa ma src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Hiki ke hoʻololi ʻia kahi puka aniani i kahi puka hopping ma ka hoʻohui ʻana i kahi kelepona i ke ala advanceBy(). I ka laʻana i hōʻike ʻia, ʻo 15 mau minuke ka wā mālama.

Ua ʻike ʻoe ma kēia ʻāpana pehea e kaupalena ai i nā hopena hōʻuluʻulu i nā puka makani manawa. ʻO ka mea nui, makemake wau e hoʻomanaʻo ʻoe i kēia mau mea ʻekolu mai kēia ʻāpana:

  • ʻaʻole i kaupalena ʻia ka nui o nā puka makani i ka manawa, akā ma ka hana o ka mea hoʻohana;
  • Hāʻawi nā puka makani "tumbling" i kahi hiʻohiʻona o nā hanana i loko o kahi manawa i hāʻawi ʻia;
  • Hoʻopaʻa ʻia ka lōʻihi o ka lele ʻana i nā puka makani, akā ua hoʻonui pinepine ʻia lākou a loaʻa paha nā mea i kau ʻia ma nā puka makani āpau.

A laila, e aʻo mākou pehea e hoʻohuli ai i kahi KTable i kahi KStream no kahi pilina.

5.3.3. Hoʻohui i nā mea KStream a me KTable

Ma ka Mokuna 4, ua kūkākūkā mākou i ka hoʻopili ʻana i ʻelua mau mea KStream. I kēia manawa pono mākou e aʻo pehea e hoʻopili ai iā KTable a me KStream. Pono paha kēia no kēia kumu maʻalahi. ʻO KStream kahi kahawai o nā moʻolelo, a ʻo KTable kahi kahawai o nā hoʻopaʻa moʻolelo, akā i kekahi manawa makemake paha ʻoe e hoʻohui i ka pōʻaiapili hou i ke kahawai moʻo me ka hoʻohana ʻana i nā mea hou mai ka KTable.

E lawe i ka ʻikepili i ka helu o nā kālepa kūʻai kālā a hoʻohui iā lākou me nā nūhou kūʻai kālā no nā ʻoihana pili. Eia kāu mea e hana ai e hoʻokō i kēia hāʻawi ʻia i ke code i loaʻa iā ʻoe.

  1. E hoʻohuli i kahi mea KTable me ka ʻikepili e pili ana i ka helu o nā kālepa waiwai i kahi KStream, a ukali ʻia me ke pani ʻana i ke kī me ke kī e hōʻike ana i ka māhele ʻoihana e pili ana i kēia hōʻailona waiwai.
  2. E hana i kahi mea KTable e heluhelu ana i ka ʻikepili mai ke kumuhana me ka nūhou kūʻai waiwai. E hoʻokaʻawale ʻia kēia KTable hou e ka ʻoihana ʻoihana.
  3. Hoʻohui i nā nūhou me ka ʻike e pili ana i ka helu o nā kālepa hoʻololi waiwai e ka ʻoihana ʻoihana.

I kēia manawa e ʻike kākou pehea e hoʻokō ai i kēia hoʻolālā hana.

E hoʻohuli iā KTable i KStream

No ka hoʻololi ʻana iā KTable i KStream pono ʻoe e hana i kēia.

  1. Kāhea i ke ʻano KTable.toStream().
  2. Ma ke kāhea ʻana i ke ʻano KStream.map, e hoʻololi i ke kī me ka inoa ʻoihana, a laila e kiʻi i ka mea TransactionSummary mai ka Windowed instance.

E kaulahao mākou i kēia mau hana penei (hiki ke loaʻa ke code ma ka faila src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.8).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
No ka mea ke hana nei mākou i kahi hana KStream.map, ua hoʻokaʻawale hou ʻia ke ʻano o KStream i hoʻihoʻi ʻia ke hoʻohana ʻia i kahi pilina.

Ua hoʻopau mākou i ke kaʻina hoʻololi, a laila pono mākou e hana i kahi mea KTable no ka heluhelu ʻana i nā nūhou.

Ka hana ʻana o KTable no ka nūhou waiwai

ʻO ka mea pōmaikaʻi, ʻo ka hana ʻana i kahi mea KTable e lawe i hoʻokahi laina o ke code (hiki ke loaʻa ke code ma src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.9).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
He mea pono e hoʻomaopopo ʻaʻole pono e kuhikuhi ʻia nā mea Serde, no ka mea, hoʻohana ʻia nā string Serdes i nā hoʻonohonoho. Eia kekahi, ma ka hoʻohana ʻana i ka helu EARLIEST, hoʻopiha ʻia ka pākaukau me nā moʻolelo ma ka hoʻomaka.

I kēia manawa hiki iā mākou ke neʻe i ka pae hope - pili.

Hoʻohui i nā nūhou me ka ʻikepili helu kālepa

ʻAʻole paʻakikī ka hana ʻana i kahi pilina. E hoʻohana mākou i kahi hui hema inā ʻaʻohe nūhou waiwai no ka ʻoihana pili (hiki ke loaʻa ke code pono ma ka faila src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.10).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
He mea maʻalahi kēia leftJoin operator. ʻAʻole like me nā hui ma ka Mokuna 4, ʻaʻole hoʻohana ʻia ke ʻano JoinWindow no ka mea i ka wā e hana ai i kahi hui KStream-KTable, hoʻokahi wale nō komo i ka KTable no kēlā me kēia kī. ʻAʻole i kaupalena ʻia kēlā pilina i ka manawa: aia ka moʻolelo ma ka KTable a i ʻole. ʻO ka hopena nui: me ka hoʻohana ʻana i nā mea KTable hiki iā ʻoe ke hoʻonui i ka KStream me ka ʻike ʻike kuhikuhi pinepine ʻole.

I kēia manawa, e nānā mākou i kahi ala ʻoi aku ka maikaʻi e hoʻonui ai i nā hanana mai KStream.

5.3.4. Nā mea hiki i ka GlobalKTable

E like me kāu e ʻike ai, pono e hoʻonui i nā kahawai hanana a i ʻole e hoʻohui i ka pōʻaiapili iā lākou. Ma ka Mokuna 4 ua ʻike ʻoe i nā pilina ma waena o ʻelua mau mea KStream, a ma ka pauku mua ua ʻike ʻoe i ka pilina ma waena o kahi KStream a me kahi KTable. I kēia mau hihia a pau, pono e hoʻokaʻawale hou i ke kahawai ʻikepili i ka wā e paʻi ai i nā kī i kahi ʻano hou a i ʻole ka waiwai. I kekahi manawa hana ʻia ka hoʻokaʻawale ʻana, a i kekahi manawa e hana maʻalahi ʻo Kafka Streams. Pono ka hoʻokaʻawale hou ʻana no ka mea ua hoʻololi nā kī a pono e pau nā moʻolelo i nā ʻāpana hou, inā ʻaʻole hiki ke hoʻopili ʻia (ua kūkākūkā ʻia kēia ma ka Mokuna 4, ma ka ʻāpana "Re-partitioning data" ma ka paukū 4.2.4).

He koina ko ka mahele hou ana

Pono ka hoʻokaʻawale hou ʻana i nā kumukūʻai - nā kumu waiwai hou no ka hoʻokumu ʻana i nā kumuhana waena, mālama ʻana i ka ʻikepili pālua i ke kumuhana ʻē aʻe; ʻo ia hoʻi ka piʻi ʻana o ka latency ma muli o ke kākau ʻana a me ka heluhelu ʻana mai kēia kumuhana. Eia hou, inā pono ʻoe e hui pū ma nā ʻaoʻao a i ʻole hoʻokahi ʻāpana, pono ʻoe e kaulahao i nā hui, palapala i nā moʻolelo me nā kī hou, a holo hou i ke kaʻina hoʻokaʻawale.

Hoʻopili ʻana i nā ʻikepili liʻiliʻi

I kekahi mau hihia, liʻiliʻi ka nui o ka ʻikepili kuhikuhi e hoʻopili ʻia, no laila hiki ke hoʻopili maʻalahi nā kope piha o ia mea ma ka ʻāina ma kēlā me kēia node. No nā kūlana e like me kēia, hāʻawi ʻo Kafka Streams i ka papa GlobalKTable.

He ʻokoʻa nā hiʻohiʻona GlobalKTable no ka mea e hoʻopiʻi ka noi i nā ʻikepili āpau i kēlā me kēia o nā nodes. A no ka mea aia nā ʻikepili āpau ma kēlā me kēia node, ʻaʻohe pono e hoʻokaʻawale i ke kahawai hanana ma ke kī ʻikepili kuhikuhi i loaʻa i nā ʻāpana āpau. Hiki iā ʻoe ke hana i nā kī kī ʻole me ka hoʻohana ʻana i nā mea GlobalKTable. E hoʻi kāua i kekahi o nā laʻana mua e hōʻike i kēia hiʻohiʻona.

Hoʻohui i nā mea KStream i nā mea GlobalKTable

Ma ka paukū 5.3.2, ua hana mākou i ka hōʻuluʻulu pukaaniani o nā kālepa hoʻololi e nā mea kūʻai. ʻO nā hopena o kēia hui ʻana e like me kēia:

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

ʻOiai ua hoʻokō kēia mau hopena i ke kumu, ʻoi aku ka maikaʻi inā hōʻike pū ʻia ka inoa o ka mea kūʻai a me ka inoa ʻoihana piha. No ka hoʻohui ʻana i ka inoa o ka mea kūʻai aku a me ka inoa ʻoihana, hiki iā ʻoe ke hana i nā hui maʻamau, akā pono ʻoe e hana i ʻelua mappings kī a me ka hoʻokaʻawale hou. Me GlobalKTable hiki iā ʻoe ke pale i ke kumukūʻai o ia mau hana.

No ka hana ʻana i kēia, e hoʻohana mākou i ka mea countStream mai Listing 5.11 (hiki ke loaʻa ke code pili ma src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) a hoʻohui iā ia i ʻelua mau mea GlobalKTable.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
Ua kūkākūkā mua mākou i kēia, no laila ʻaʻole wau e haʻi hou. Akā, ke hoʻomaopopo nei au ua hoʻokaʻawale ʻia ke code ma ka toStream ().map hana i loko o kahi mea hana ma kahi o kahi ʻōlelo lambda inline no ka heluhelu ʻana.

ʻO ka hana aʻe e haʻi aku i ʻelua mau manawa o GlobalKTable (hiki ke loaʻa ke code i hōʻike ʻia ma ka faila src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Listing 5.12).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"

E ʻoluʻolu e wehewehe ʻia nā inoa kumuhana me nā ʻano helu helu.

I kēia manawa ua mākaukau nā ʻāpana āpau, ʻo nā mea a pau i koe e kākau i ke code no ka pilina (hiki ke loaʻa ma ka faila src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Listing 5.13).

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
ʻOiai he ʻelua hui i loko o kēia code, ua hoʻopaʻa ʻia lākou no ka mea ʻaʻole hoʻohana ʻia kekahi o kā lākou hopena. Hōʻike ʻia nā hopena ma ka hopena o ka hana holoʻokoʻa.

Ke holo ʻoe i ka hana hui ma luna, e loaʻa iā ʻoe nā hopena e like me kēia:

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

ʻAʻole i loli ke kumu, akā ʻoi aku ka maʻalahi o kēia mau hopena.

Inā helu ʻoe i lalo i ka Mokuna 4, ua ʻike mua ʻoe i kekahi mau ʻano pili i ka hana. Ua helu ʻia lākou ma ka papa. 5.2. Hōʻike kēia papa ʻaina i ka hiki ke hoʻohui e like me ka mana 1.0.0 o Kafka Streams; Hiki ke loli kekahi mea i nā hoʻopuka e hiki mai ana.

ʻO ka puke "Kafka Streams in Action. Nā noi a me nā microservices no ka hana manawa maoli"
No ka hoʻopili ʻana i nā mea, e hoʻihoʻi hou i nā kumu: hiki iā ʻoe ke hoʻohui i nā kahawai hanana (KStream) a me nā kahawai hou (KTable) me ka hoʻohana ʻana i ka mokuʻāina kūloko. ʻO kahi ʻē aʻe, inā ʻaʻole nui ka nui o ka ʻikepili kuhikuhi, hiki iā ʻoe ke hoʻohana i ka mea GlobalKTable. Hoʻopili hou ʻo GlobalKTables i nā ʻāpana āpau i kēlā me kēia node noi Kafka Streams, e hōʻoia ana i ka loaʻa ʻana o nā ʻikepili āpau me ka nānā ʻole i ka ʻāpana e pili ana ke kī.

A laila e ʻike mākou i ka hiʻohiʻona Kafka Streams, mahalo i hiki iā mākou ke nānā i nā loli mokuʻāina me ka ʻole o ka ʻai ʻana i ka ʻikepili mai kahi kumuhana Kafka.

5.3.5. Kūlana hiki ke nīnau

Ua hana mua mākou i kekahi mau hana e pili ana i ka mokuʻāina a hoʻopuka mau i nā hopena i ka console (no ka hoʻomohala ʻana) a i ʻole e kākau iā lākou i kahi kumuhana (no nā kumu hana). Ke kākau nei i nā hopena i kahi kumuhana, pono ʻoe e hoʻohana i kahi mea kūʻai aku Kafka e nānā iā lākou.

ʻO ka heluhelu ʻana i nā ʻikepili mai kēia mau kumuhana hiki ke noʻonoʻo ʻia he ʻano o nā manaʻo i hoʻohālikelike ʻia. No kā mākou mau kumu, hiki iā mākou ke hoʻohana i ka wehewehe ʻana o kahi ʻike i hoʻohālikelike ʻia mai Wikipedia: “...he mea ʻikepili kino i loaʻa nā hopena o kahi nīnau. No ka laʻana, he kope kūloko o ka ʻikepili mamao, a i ʻole kahi ʻāpana o nā lālani a/a i ʻole nā ​​kolamu o kahi papaʻaina a hui pū i nā hopena, a i ʻole he papa hōʻuluʻulu i loaʻa ma o ka hōʻuluʻulu ʻana” (https://en.wikipedia.org/wiki /Materialized_view).

ʻAe ʻo Kafka Streams iā ʻoe e holo i nā nīnau pili i nā hale kūʻai mokuʻāina, e ʻae iā ʻoe e heluhelu pololei i kēia mau manaʻo. He mea nui e hoʻomaopopo he hana heluhelu wale nō ka nīnau i ka hale kūʻai mokuʻāina. Mālama kēia ʻaʻole pono ʻoe e hopohopo no ka hana ʻole ʻana i ka mokuʻāina i ka wā e hoʻoili ana kāu noi i ka ʻikepili.

He mea nui ka hiki ke nīnau pololei i nā hale kūʻai mokuʻāina. ʻO ia ke ʻano hiki iā ʻoe ke hana i nā noi dashboard me ka ʻole e kiʻi mua i ka ʻikepili mai ka mea kūʻai aku Kafka. Hoʻonui ia i ka pono o ka noi, no ka mea ʻaʻole pono e kākau hou i ka ʻikepili:

  • mahalo i ka wahi o ka ʻikepili, hiki ke kiʻi koke ʻia;
  • Hoʻopau ʻia ka hoʻololi ʻana o ka ʻikepili, no ka mea ʻaʻole i kākau ʻia i ka waihona waho.

ʻO ka mea nui aʻu e makemake ai e hoʻomanaʻo ʻoe hiki iā ʻoe ke nīnau pololei i ka mokuʻāina mai loko o kāu noi. ʻAʻole hiki ke hoʻonui ʻia nā manawa kūpono e hāʻawi iā ʻoe. Ma kahi o ka ʻai ʻana i ka ʻikepili mai Kafka a me ka mālama ʻana i nā moʻolelo i loko o kahi waihona no ka noi, hiki iā ʻoe ke nīnau i nā hale kūʻai mokuʻāina me ka hopena like. ʻO nā nīnau kikoʻī i nā hale kūʻai mokuʻāina ʻo ia ka liʻiliʻi o ke code (ʻaʻohe mea kūʻai aku) a me ka lako polokalamu liʻiliʻi (ʻaʻole pono i kahi papa ʻikepili e mālama i nā hopena).

Ua uhi mākou i kahi ʻāpana o kēia mokuna, no laila e haʻalele mākou i kā mākou kūkākūkā o nā nīnau pili i nā hale kūʻai mokuʻāina i kēia manawa. Mai hopohopo: ma ka Mokuna 9, e hana mākou i kahi noi dashboard maʻalahi me nā nīnau pili. E hoʻohana ia i kekahi o nā laʻana mai kēia a me nā mokuna mua e hōʻike i nā nīnau pili a pehea e hiki ai iā ʻoe ke hoʻohui iā lākou i nā noi Kafka Streams.

Hōʻuluʻulu

  • Hōʻike nā mea KStream i nā kahawai o nā hanana, e like me nā hoʻokomo i loko o kahi waihona. Hōʻike nā mea KTable i nā kahawai hou, e like me nā mea hou i kahi waihona. ʻAʻole ulu ka nui o ka mea KTable, hoʻololi ʻia nā moʻolelo kahiko e nā mea hou.
  • Pono nā mea KTable no nā hana hoʻohui.
  • Ke hoʻohana nei i nā hana windowing, hiki iā ʻoe ke hoʻokaʻawale i ka ʻikepili i hōʻuluʻulu ʻia i loko o nā bākeke manawa.
  • Mahalo i nā mea GlobalKTable, hiki iā ʻoe ke komo i ka ʻikepili kuhikuhi ma nā wahi āpau o ka noi, me ka ʻole o ka hoʻokaʻawale ʻana.
  • Hiki i nā pilina ma waena o KStream, KTable a me GlobalKTable.

I kēia manawa, ua kālele mākou i ke kūkulu ʻana i nā noi Kafka Streams me ka hoʻohana ʻana i ka KStream DSL kiʻekiʻe. ʻOiai ʻo ke ala kiʻekiʻe e hiki ai iā ʻoe ke hana i nā papahana maʻemaʻe a pōkole, ʻo ka hoʻohana ʻana ia i kahi kālepa-off. ʻO ka hana ʻana me DSL KStream ʻo ia ka hoʻonui ʻana i ka conciseness o kāu code ma ka hōʻemi ʻana i ke kiʻekiʻe o ka mana. Ma ka mokuna aʻe, e nānā mākou i ka API node mea haʻahaʻa haʻahaʻa a hoʻāʻo i nā kālepa-off ʻē aʻe. ʻOi aku ka lōʻihi o nā papahana ma mua o ka wā ma mua, akā hiki iā mākou ke hana i kahi kokoke i nā node handler e pono ai mākou.

→ Hiki ke loaʻa nā kikoʻī hou aku e pili ana i ka puke ma punaewele o ka mea hoʻopuka

→ No ka Habrozhiteli 25% ho'ēmi me ka coupon - Kahawai Kafka

→ Ma ka uku ʻana i ka mana pepa o ka puke, e hoʻouna ʻia kahi puke uila ma ka leka uila.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka