Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 129246|Atbildi: 17

[Avots] Kafka operācijas .NET/C# ziņojumu rindām [ar avota kodu]

[Kopēt saiti]
Publicēts 13.04.2021 11:45:31 | | | |
Kafka ir LinkedIn izstrādāta augstas veiktspējas, izplatīta ziņojumapmaiņas sistēma, kas tiek plaši izmantota tādos scenārijos kā žurnālu vākšana, straumēšanas datu apstrāde, tiešsaistes un bezsaistes ziņojumu izplatīšana un citi. Lai gan Kafaka nav izstrādāts kā tradicionāls MQ, vairumā gadījumu tas var aizstāt tradicionālās ziņojumapmaiņas sistēmas, piemēram, ActiveMQ.

Kafka organizē ziņojumu plūsmu pēc tēmām, un serveri, kurā atrodas ziņojumi, sauc par brokeri, un patērētāji var abonēt vienu vai vairākas tēmas. Lai līdzsvarotu slodzi, tēmas ziņojumus var iedalīt vairākos nodalījumos, un jo vairāk starpsienu, jo lielāks ir Kafkas paralēlisms un caurlaidspēja.

Kafkas klasteriem ir nepieciešams zooturētāja atbalsts, lai ieviestu klasterus, un zookeeper jau ir iekļauts jaunākajā kafkas izplatījumā, ko var izvietot, lai vienlaikus startētu zookeeper serveri un Kafka serveri vai izmantotu citus esošos zookeeper klasterus.

Atšķirībā no tradicionālā MQ, patērētājiem pašiem ir jāsaglabā nobīde, un, saņemot ziņojumus no kafkas, tikai pēc pašreizējās nobīdes. Kafkas scala/java klients jau īsteno šo loģikas daļu, saglabājot nobīdi zoodārza turētājam. Katrs patērētājs var izvēlēties ID, un patērētāji ar vienu un to pašu ID saņems vienu un to pašu ziņojumu tikai vienu reizi.Ja tēmas patērētāji izmanto vienu un to pašu ID, tā ir tradicionālā rinda. Ja katrs patērētājs izmanto atšķirīgu ID, tas ir tradicionāls krogs.

Pārskats:

ActiveMQ pievienošana sistēmas pakalpojumiem operētājsistēmā Windows
https://www.itsvse.com/thread-6210-1-1.html

NumberOfPendingMessages, MessagesEnqueued, Messag...
https://www.itsvse.com/thread-4954-1-1.html

Informācijas kopsavilkums par ActiveMQ un RabbitMQ
https://www.itsvse.com/thread-4659-1-1.html

CentOS ActiveMQ tiek pievienots pakalpojumam
https://www.itsvse.com/thread-4617-1-1.html

Centos 6.2 64 bitu instalēšana activemq apmācība
https://www.itsvse.com/thread-4616-1-1.html

ActiveMQ5.15.3 neizdodas startēt, un tiek ziņots par UnsupportedClassVersionError
https://www.itsvse.com/thread-4615-1-1.html

Activemq tēmas atļauju iestatījumi
https://www.itsvse.com/thread-4495-1-1.html

Lietotājs itsvse nav pilnvarots lasīt no: ActiveMQ.Advisory.TempQueue,Activ...
https://www.itsvse.com/thread-4476-1-1.html

C# ActiveMQ klients abonē avota kodu
https://www.itsvse.com/thread-4470-1-1.html

.net/c# activemq, lai iestatītu savienojuma kontu un paroli
https://www.itsvse.com/thread-4282-1-1.html

ACTIVEMQ dizaina un rindas lietotājvārda un paroles iestatīšana
https://www.itsvse.com/thread-4281-1-1.html

ActiveMQ modificē tīmekļa vietnes pārvaldības paroli
https://www.itsvse.com/thread-4280-1-1.html

activemq Pastāvīgais krātuve ir pilna
https://www.itsvse.com/thread-4125-1-1.html

.NET/C# ActiveMQ operācijas piemērs [Avota kods]
https://www.itsvse.com/thread-3907-1-1.html

Activemq lietotāja atļauju konfigurācija
https://www.itsvse.com/thread-3906-1-1.html

Atšķirība starp activemq rindu un tēmu ir tāda, ka
https://www.itsvse.com/thread-3863-1-1.html

. .Net platforma
https://www.itsvse.com/thread-3452-1-1.html

ActiveMQ pastāvīgā abonementa iestatījumi
https://www.itsvse.com/thread-3451-1-1.html

RabbitMQ BasicQos patērētāju paralēlās apstrādes ierobežojums
https://www.itsvse.com/thread-4667-1-1.html

rabbitMQ rindas rindas ziņojuma noturība [ar avota kodu]
https://www.itsvse.com/thread-4657-1-1.html

【Prakse】 rabbitMQ konsole, lai pievienotu konta informāciju
https://www.itsvse.com/thread-4655-1-1.html

Padziļināta RabbitMQ ziņojuma atbildes mehānisma analīze
https://www.itsvse.com/thread-4639-1-1.html

.net/c# RabbitMQ savienojuma atvienošana - atvienošana un atkārtota pieslēgšana
https://www.itsvse.com/thread-4636-1-1.html

Ievads trīs RabbitMQ apmaiņas režīmos (fanout, tiešais un tēma)
https://www.itsvse.com/thread-4635-1-1.html

【Prakse】 RabbitMQ instalē tīmekļa pārvaldības spraudni
https://www.itsvse.com/thread-4631-1-1.html

【Praktiskā cīņa】 RabbitMQ instalēšanas apmācība operētājsistēmā Windows
https://www.itsvse.com/thread-4630-1-1.html
Kafkas patēriņš

1. Viena group_id patērētāji tikai viens patērētājs var patērēt ziņojumus (Rindas rindas režīms

2. Dažādu group_id patērētāji saņem vienas un tās pašas ziņas

Kafkas priekšrocības

Izplatīts un ļoti mērogojams. Kafkas klasterus var pārredzami mērogot, lai klasterim pievienotu jaunus serverus.

Augsta veiktspēja. Kafka veiktspēja ievērojami pārsniedz tradicionālo MQ ieviešanu, piemēram, ActiveMQ un RabbitMQ, īpaši Kafka, kas atbalsta arī pakešu operācijas. Nākamajā attēlā parādīti LinkedIn patērētāju veiktspējas stresa testa rezultāti:

Kļūdu tolerance. Dati no katra Kafkas nodalījuma tiek replicēti uz vairākiem serveriem. Ja brokeris neizdodas, ZooKeeper pakalpojums paziņos ražotājam un patērētājam, kuri pāriet uz citu brokeri.

Kafkas trūkumi:

Atkārtojiet ziņojumus. Kafka garantē tikai to, ka katrs ziņojums tiks piegādāts vismaz vienu reizi, un, lai gan izredzes ir niecīgas, pastāv iespēja, ka ziņojums tiks piegādāts vairākas reizes.
Ziņas nav kārtībā. Lai gan tiek garantēts, ka ziņojumi nodalījumā ir sakārtoti, ja tēmai ir vairāki nodalījumi, ziņojumu piegāde starp nodalījumiem nav garantēta.
Sarežģītība. Kafka prasa zoodārza kopu atbalstu, un tēmas parasti prasa manuālu darbu, lai izveidotu, izvietotu un uzturētu dārgāk nekā vispārējās ziņojumu rindas

.NET/C# ziņojumu rindas Kafka operācijas

Pirmkārt, izmantojiet .NET Core 3.1, lai izveidotu divus jaunus konsoles projektus, proti, Kafka-Consumer un Kafka-Producer

Izmantojiet nuget, lai atsauktos uz Confluent.Kafka pakotni šādi, ar šādu komandu:

GitHub adrese:Hipersaites pieteikšanās ir redzama.

Mēs vispirms sākam producenta programmu, un, ja mēs vispirms sākam patērētāju, mēs saņemsim šādu kļūdu:
Radās kļūda: Brokeris: nezināma tēma vai nodalījums

Šajā rakstā tiks izmantoti iestatījumiEnableAutoOffsetStore ir nepatiess, tas ir, manuāli iestatot nobīdes krātuvi (līdzīgi manuālam apstiprinājuma ziņojumam)

Patērētāji neiestata OffsetStore pēc patēriņa

Mēģiniet izmantot ražotāju, lai radītu divus ziņojumus, ieslēgtu patērētāju patēriņu, MaxPollIntervalMs = 10000 // 10 sekundes bez manuālas iestatīšanas, ļaujiet citiem klientiem patērēt, protams, citi klienti to nepatērēs 10 sekunžu laikā

MaxPollIntervalMs skaidro
Pieredzējušiem patērētājiem maksimālais atļautais laiks ziņojumu patēriņam starp zvaniem (piemēram, rd_kafka_consumer_poll()). Ja šis intervāls tiek pārsniegts, tiek uzskatīts, ka patērētājs ir cietis neveiksmi, un grupa tiek līdzsvarota tā, lai nodalījums tiktu piešķirts citam patērētāju grupas dalībniekam. Brīdinājums: Šobrīd nobīdes saistības var nebūt iespējamas. Piezīme: Ieteicams iestatīt "enable.auto.offset.store=false" lietojumprogrammām, kas apstrādā ilgu laiku, un pēc tam skaidri saglabāt nobīdi (izmantojot offsets_store()) pēc ziņojuma apstrādes*, lai nodrošinātu, ka nobīde netiek automātiski veikta pirms apstrādes pabeigšanas. Pārbaudiet reizi sekundē ar divu intervālu. Plašāku informāciju skatiet KIP-62.

Atveidojumi ir šādi:



OffsetStore tiek iestatīts pēc tam, kad patērētājs ir pabeidzis tērēt

kods

Kad iestatīšana ir pabeigta, pagaidiet 10 sekundes, un tas joprojām tiks darītsSaņēmu pēdējo ziņojumu(Kad patērētājs pieslēdzas brokerim,Sākt patēriņu no nobīdes pozīcijasJa ir iestatīts c.Commit(cr); Pēdējais ziņojums netiks saņemts atkārtoti.

Skatīt avota kodu



veikt nobīdi + 1 commit un galu galā izsaukt Librdkafka.topic_partition_list_destroy(cOffsets);

Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.

Cita GroupId iestatīšana

Mēģiniet iestatīt citu GroupId, izmantojot komandrindas parametru, un pēc tam nosūtiet ziņojumu caur ražotāju, kā parādīts šajā attēlā:



Gan clinet1, gan client2Vēsturisko ziņojumu saņemšana, un pēc tam, kad producents nosūtīs ziņu, abi būs gandrīzSaņemiet ziņojumus vienlaicīgi

Jaunie patērētāji saņem tikai jaunus ziņojumus

Kā panākt, lai jauns klients saņemtu tikai jaunus ziņojumus un ignorētu vēsturiskos datus?

Iestatījumi ir šādi:

Kā parādīts zemāk:



Ražotāja kods

Šādi:

Patērētāju kods

Šādi:

Avota koda lejupielāde

Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzuAtbildi






Iepriekšējo:.NET/C# izņēmums, izmantojot Tencent Enterprise pastkasti: operācijai ir iestājies taimauts.
Nākamo:NuGet notīra kešatmiņu
 Saimnieks| Publicēts 15.04.2021 09:31:05 |
Kad .NET Kafka klients ir atvienots, tas nerada izņēmumu un atkal izveido savienojumu pēc tam, kad tīkls ir normāls
%4|1618450028.267| FAIL|rdkafka#patērētājs-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Atvienots (pēc 59926 ms stāvoklī UP)
%3|1618450028.267| KĻŪDA|rdkafka#patērētājs-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Atvienots (pēc 59926 ms stāvoklī UP)
%3|1618450028.267| FAIL|rdkafka#patērētājs-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Izveidot savienojumu ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 0 ms stāvoklī CONNECT)
%3|1618450028.268| KĻŪDA|rdkafka#patērētājs-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Izveidot savienojumu ar ipv4#192.168.1.175:9092 neizdevās: nezināma kļūda (pēc 0 ms stāvoklī CONNECT)
%3|1618450028.357| FAIL|rdkafka#patērētājs-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Izveidot savienojumu ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 10 ms stāvoklī CONNECT, 1 identiska kļūda (-as) nomākta)
%3|1618450028.357| KĻŪDA|rdkafka#patērētājs-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Savienojums ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 10 ms stāvoklī CONNECT, 1 identiska kļūda(-as) nomākta)
%3|1618450062.882| FAIL|rdkafka#patērētājs-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Savienojums ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 0 ms stāvoklī CONNECT, 8 identiskas kļūdas)
%3|1618450062.882| KĻŪDA|rdkafka#patērētājs-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Izveidot savienojumu ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 0 ms stāvoklī CONNECT, 8 identiskas kļūdas nomāktas)
%3|1618450098.255| FAIL|rdkafka#patērētājs-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Izveidot savienojumu ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 11 ms stāvoklī CONNECT, 4 identiskas kļūdas nomāktas)
%3|1618450098.255| KĻŪDA|rdkafka#patērētājs-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Savienojums ar ipv4#192.168.1.175:9092 neizdevās: nezināma kļūda (pēc 11 ms stāvoklī CONNECT, 4 identiskas kļūdas)
%3|1618450138.243| FAIL|rdkafka#patērētājs-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Izveidot savienojumu ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 0 ms stāvoklī CONNECT, 4 identiskas kļūdas)
%3|1618450138.244| KĻŪDA|rdkafka#patērētājs-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Savienojums ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 0 ms stāvoklī CONNECT, 4 identiskas kļūdas)
%3|1618450168.254| FAIL|rdkafka#patērētājs-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Savienojums ar ipv4#192.168.1.175:9092 neizdevās: Nezināma kļūda (pēc 10 ms stāvoklī CONNECT, 3 identiskas kļūdas)
%3|1618450168.254| KĻŪDA|rdkafka#patērētājs-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Savienojums ar ipv4#192.168.1.175:9092 neizdevās: nezināma kļūda (pēc 10 ms stāvoklī CONNECT, 3 identiskas kļūdas tika novērstas)

 Saimnieks| Publicēts 13.04.2021 16:26:58 |
Ziņojuma patēriņa princips:

Faktiskajā ražošanas procesā katrai tēmai būs vairāki nodalījumi, un vairāku nodalījumu priekšrocība ir tā, ka, no vienas puses, spēja sadalīt datus brokerī efektīvi samazina ziņojumu jaudu un uzlabo IO veiktspēju. No otras puses, lai uzlabotu patērētāju puses patēriņa jaudu, viena un tā pati tēma parasti tiks patērēta caur vairākiem patērētājiem, tas ir, patērētāju puses slodzes līdzsvarošanas mehānismu, ko mēs sapratīsim tālāk, kā patērētāji patērē ziņojumus vairāku starpsienu un vairāku patērētāju gadījumā? Kafka pastāv patērētāju grupu jēdzienā, tas ir, group.id tāda paša veida patērētāji, kas pieder patērētāju grupai, un visi grupas patērētāji koordinē, lai patērētu visus abonēšanas tēmas nodalījumus. Protams, katru nodalījumu var patērēt tikai vienas un tās pašas patērētāju grupas patērētāji, tātad kā patērētāji vienā un tajā pašā patērētāju grupā sadala datus, kuros nodalījums būtu jāpatērē? Vienkāršam piemēram, ja ir nodalījumi, kas zaudē, tas ir, ja partitonu skaits ir tāds pats kā patērētāju skaits, katrs patērētājs atbilst nodalījumam, ja patērētāju skaits ir lielāks par starpsienām, tad papildu patērētāju skaits nedarbosies, gluži pretēji, būs patērētāji, kas patērē vairākas starpsienas.

Zonējuma piešķiršanas stratēģija:

Kafkā ir divas nodalījuma sadales stratēģijas, viena ir diapazons (noklusējums) un otra ir RoundRobin (aptauja). To nosaka patērētāja konfigurācijas parametrs partition.assignment.strategy.


Skatīt visas tēmas


Detalizētas informācijas skatīšana par tēmu




 Saimnieks| Publicēts 08.05.2021 17:17:33 |
Kafka dzēš patērētāju grupas



Pieprasīto patērētāju grupu ("itsvse") dzēšana bija veiksmīga.


Var ziņot par šādām kļūdām:

Error: Deletion of some consumer groups failed:
* Grupu 'itsvse' nevarēja izdzēst, jo: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.GroupNotEmptyException: grupa nav tukša.
šķīdums

Visu ziņojumu patērēšana vai nobīdes iestatīšana

Kafka manuāli iestata nobīdi
https://www.itsvse.com/thread-9641-1-1.html
Pēc tam izdzēsiet to vēlreiz!

 Saimnieks| Publicēts 13.04.2021 15:40:48 |
Power Shell komanda



Katrs patērētāja klients uztur 2 savienojumus ar Kafka pakalpojumu
 Saimnieks| Publicēts 07.05.2021 12:37:06 |
kafka, lai skatītu tēmu kaudzes skaitu noteiktā grupā

Publicēts 16.06.2021 12:41:09 |
Lūdzu, jautājiet, kāpēc kodu nevar apskatīt~
 Saimnieks| Publicēts 25.06.2021 10:50:06 |
Kafka saņem tēmas lieluma komandu:



 Saimnieks| Publicēts 18.07.2021 10:15:01 |
Kafka komandrinda, lai izveidotu tēmas:

Publicēts 03.09.2021 11:52:41 |
Kafkā joprojām ir daudz nepilnību, iemācītos
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com