Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 129246|Svar: 17

[Kilde] Kafka-operationer for .NET/C# beskedkøer [med kildekode]

[Kopier link]
Opslået på 13/04/2021 11.45.31 | | | |
Kafka er et højtydende, distribueret beskedsystem udviklet af LinkedIn, som er bredt anvendt i scenarier som logindsamling, streaming af data, online og offline beskeddistribution og mere. Selvom Kafaka ikke er designet som en traditionel MQ, kan den i de fleste tilfælde erstatte traditionelle beskedsystemer som ActiveMQ.

Kafka organiserer strømmen af beskeder efter emner, og serveren, der opbevarer beskederne, kaldes en mægler, og forbrugere kan abonnere på et eller flere emner. For at balancere belastningen kan emnernes beskeder opdeles i flere partitioner, og jo flere partitioner, desto højere er parallelismen og gennemstrømningen af Kafka.

Kafka-klynger kræver zookeeper-support for at implementere klynger, og zookeeper er allerede inkluderet i den nyeste Kafka-distribution, som kan implementeres til at starte både en zookeeper-server og en Kafka-server samtidig eller bruge andre eksisterende zookeeper-klynger.

I modsætning til traditionel MQ skal forbrugerne selv holde en offset, og når de modtager beskeder fra Kafka, skal de kun trække beskeder efter den aktuelle offset. Kafkas scala/java-klient implementerer allerede denne del af logikken ved at gemme offset til zookeeperen. Hver forbruger kan vælge et ID, og forbrugere med samme ID vil kun modtage den samme besked én gang.Hvis forbrugere af et emne alle bruger det samme id, er det en traditionel kø. Hvis hver forbruger bruger et forskelligt ID, er det en traditionel pub-sub.

Anmeldelse:

Tilføj ActiveMQ til systemtjenester under Windows
https://www.itsvse.com/thread-6210-1-1.html

AntalAfventendeBeskeder, BeskederKø, Beskeder...
https://www.itsvse.com/thread-4954-1-1.html

Resumé af information om ActiveMQ og RabbitMQ
https://www.itsvse.com/thread-4659-1-1.html

CentOS ActiveMQ er tilføjet til tjenesten
https://www.itsvse.com/thread-4617-1-1.html

Centos 6.2 64-bit installation activemq vejledning
https://www.itsvse.com/thread-4616-1-1.html

ActiveMQ5.15.3 kan ikke starte, og UnsupportedClassVersionError rapporteres
https://www.itsvse.com/thread-4615-1-1.html

Activemq emnetilladelsesindstillinger
https://www.itsvse.com/thread-4495-1-1.html

Bruger itsvse er ikke autoriseret til at læse fra: ActiveMQ.Advisory.TempQueue,Activ...
https://www.itsvse.com/thread-4476-1-1.html

C# ActiveMQ-klienten abonnerer på kildekoden
https://www.itsvse.com/thread-4470-1-1.html

.net/c# activemq til at sætte forbindelseskontoen og adgangskoden
https://www.itsvse.com/thread-4282-1-1.html

Sæt brugernavn og adgangskode til ACTIVEMQ-temaet og køen
https://www.itsvse.com/thread-4281-1-1.html

ActiveMQ ændrer adgangskoden til webstedsadministration.
https://www.itsvse.com/thread-4280-1-1.html

activemq Persistent store er Fuld
https://www.itsvse.com/thread-4125-1-1.html

.NET/C# eksempel på en ActiveMQ-operation [Kildekode]
https://www.itsvse.com/thread-3907-1-1.html

Activemq brugertilladelseskonfiguration
https://www.itsvse.com/thread-3906-1-1.html

Forskellen mellem activemq Queue og Topic er, at
https://www.itsvse.com/thread-3863-1-1.html

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

ActiveMQ persistent abonnementsindstillinger
https://www.itsvse.com/thread-3451-1-1.html

RabbitMQ BasicQos forbruger parallel behandlingsgrænse
https://www.itsvse.com/thread-4667-1-1.html

rabbitMQ Kø Kø Beskedpersistens [med kildekode]
https://www.itsvse.com/thread-4657-1-1.html

【Practice】rabbitMQ console til at tilføje kontoinformation
https://www.itsvse.com/thread-4655-1-1.html

En dybdegående analyse af mekanismen bag RabbitMQ-beskedrespons
https://www.itsvse.com/thread-4639-1-1.html

.net/c# RabbitMQ forbindelsesafbrydelse - afbrydelse og genforbindelse
https://www.itsvse.com/thread-4636-1-1.html

Introduktion til de tre udvekslingstilstande (fanout, direkte og emne) i RabbitMQ
https://www.itsvse.com/thread-4635-1-1.html

【Practice】RabbitMQ installerer web management plugin'et
https://www.itsvse.com/thread-4631-1-1.html

【Practical Combat】RabbitMQ installationsvejledning under Windows
https://www.itsvse.com/thread-4630-1-1.html
Kafka-forbrug

1. Forbrugere af samme group_id, kun én forbruger kan forbruge beskeder (kø-kø-tilstand

2. Forbrugere af forskellige group_id modtager de samme nyheder

Fordele ved Kafka

Distribueret og meget skalerbar. Kafka-klynger kan skaleres transparent for at tilføje nye servere til klyngen.

Høj ydeevne. Kafkas ydeevne overgår langt traditionelle MQ-implementeringer som ActiveMQ og RabbitMQ, især Kafka, som også understøtter batchoperationer. Følgende billede viser resultaterne af LinkedIns forbrugerpræstations-stresstest:

Fejltolerance. Data fra hver partition i Kafka replikeres til flere servere. Når en mægler fejler, vil ZooKeeper-tjenesten underrette producenten og forbrugeren, som skifter til en anden mægler.

Ulemper ved Kafka:

Gentag beskeder. Kafka garanterer kun, at hver besked bliver leveret mindst én gang, og selvom chancerne er små, er der en chance for, at en besked bliver leveret flere gange.
Nyhederne er ude af rækkefølge. Selvom beskeder inde i en partition er garanteret at være ordnede, er det ikke garanteret, at beskedleveringen mellem partitionerne er ordnet, hvis et emne har flere partitioner.
Kompleksitet. Kafka kræver støtte fra zookeeper-klynger, og emner kræver som regel manuelt arbejde for at oprette, implementere og vedligeholde dyrere end almindelige beskedkøer

.NET/C# meddelelseskø Kafka-operationer

Først skal du bruge .NET Core 3.1 til at skabe to nye konsolprojekter, nemlig Kafka-Consumer og Kafka-Producer

Brug nuget til at referere til Confluent.Kafka-pakken på denne måde, med følgende kommando:

GitHub-adresse:Hyperlink-login er synlig.

Vi starter Producer-programmet først, og hvis vi starter forbrugeren først, får vi følgende fejl:
Fejl opstod: Broker: Ukendt emne eller partition

Denne artikel vil tage hensyn til indstillingerEnableAutoOffsetStore er falsk, det vil sige manuelt at indstille offset-lageret (svarende til en manuel bekræftelsesmeddelelse)

Forbrugere sætter ikke OffsetStore efter forbrug

Prøv at bruge produceren til at producere to beskeder, slå forbrugerforbrug til, MaxPollIntervalMs = 10000 // 10 sekunder uden manuel indstilling, lad andre klienter forbruge, selvfølgelig vil det ikke blive forbrugt af andre klienter inden for 10 sekunder

MaxPollIntervalMs forklarer
For avancerede forbrugere var den maksimale tilladte tid til at forbruge beskeder mellem opkald (for eksempel rd_kafka_consumer_poll()). Hvis dette interval overskrides, anses forbrugeren for at have fejlet, og gruppen rebalanceres, så partitionen tildeles et andet medlem af forbrugergruppen. Advarsel: Offset-commits er muligvis ikke mulige på nuværende tidspunkt. Bemærk: Det anbefales at sætte "enable.auto.offset.store=false" for applikationer, der behandler i lang tid, og derefter eksplicit gemme offset (ved at bruge offsets_store()) efter beskeden er behandlet* for at sikre, at offset ikke automatisk committes, før behandlingen er færdig. Tjek én gang i sekundet med to intervaller. For mere information, se KIP-62.

Renderingerne er som følger:



OffsetStore fastsættes efter, at forbrugeren har afsluttet sine udgifter

kodeks

Når opsætningen er færdig, vent 10 sekunder, så vil den stadig gøre detModtog den sidste besked(Når forbrugeren forbinder til mægleren,Start forbruget fra offset-positionenHvis c.Commit(cr) er sat; Den sidste besked vil ikke blive modtaget gentagne gange.

Se kildekode



commit offset + 1 commit, og kald til sidst Librdkafka.topic_partition_list_destroy(cOffsets);

Hyperlink-login er synlig.
Hyperlink-login er synlig.

Sæt et andet GroupId

Prøv at sætte et andet GroupId via kommandolinjeparameteren, og send derefter en besked gennem produceren, som vist i følgende billede:



Både clinet1 og client2Modtag historiske beskeder, og efter at producenten har sendt en besked ud, vil begge næsten væreModtag beskeder samtidig

Nye forbrugere modtager kun nye beskeder

Hvordan får man en ny klient til kun at modtage nye beskeder og ignorere historiske data?

Indstillingerne er som følger:

Som vist nedenfor:



Producentkode

Som følger:

Forbrugerkode

Som følger:

Kildekode-download

Turister, hvis I vil se det skjulte indhold i dette indlæg, så vær venligSvar






Tidligere:.NET/C# undtagelse ved brug af Tencent Enterprise Mailbox: Operationen er udløbet.
Næste:NuGet rydder cachen
 Udlejer| Opslået på 15/04/2021 09.31.05 |
Når .NET Kafka-klienten afbrydes, kaster den ikke en undtagelse og genopretter forbindelsen, når netværket er normalt
%4|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Afbrudt (efter 59926 ms i tilstand UP)
%3|1618450028.267| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Afbrudt (efter 59926 ms i tilstand UP)
%3|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 fejlede: Ukendt fejl (efter 0 ms i tilstand CONNECT)
%3|1618450028.268| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 fejlede: Ukendt fejl (efter 0ms i tilstand CONNECT)
%3|1618450028.357| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 fejlede: Ukendt fejl (efter 10 ms i tilstand CONNECT, 1 identiske fejl(er) undertrykt)
%3|1618450028.357| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 fejlede: Ukendt fejl (efter 10 ms i tilstand CONNECT, 1 identiske fejl(er) undertrykt)
%3|1618450062.882| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 mislykkedes: Ukendt fejl (efter 0 ms i tilstand CONNECT, 8 identiske fejl(er) undertrykt)
%3|1618450062.882| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 fejlede: Ukendt fejl (efter 0ms i tilstand CONNECT, 8 identiske fejl(er) undertrykt)
%3|1618450098.255| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 mislykkedes: Ukendt fejl (efter 11 ms i tilstand CONNECT, 4 identiske fejl(er) undertrykt)
%3|1618450098.255| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Forbind til IPv4#192.168.1.175:9092 mislykkedes: Ukendt fejl (efter 11 ms i tilstand CONNECT, 4 identiske fejl undertrykt)
%3|1618450138.243| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 mislykkedes: Ukendt fejl (efter 0ms i tilstand CONNECT, 4 identiske fejl undertrykt)
%3|1618450138.244| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 mislykkedes: Ukendt fejl (efter 0 ms i tilstand CONNECT, 4 identiske fejl(er) undertrykt)
%3|1618450168.254| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 fejlede: Ukendt fejl (efter 10 ms i tilstand CONNECT, 3 identiske fejl(er) undertrykt)
%3|1618450168.254| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Forbind til ipv4#192.168.1.175:9092 fejlede: Ukendt fejl (efter 10 ms i tilstand CONNECT, 3 identiske fejl undertrykt)

 Udlejer| Opslået på 13/04/2021 16.26.58 |
Princippet for beskedforbrug:

I selve produktionsprocessen vil hvert emne have flere partitioner, og fordelen ved flere partitioner er, at muligheden for at sharde dataene på brokeren effektivt reducerer kapaciteten af beskeder og forbedrer IO-ydelsen. På den anden side, for at forbedre forbrugersidens forbrugskraft, vil det samme emne generelt blive brugt gennem flere forbrugere, det vil sige load balancing-mekanismen på forbrugersiden, som vi næste gang vil forstå: hvordan forbrugere forbruger forbruger beskeder i tilfælde af flere partitioner og flere forbrugere? Kafka eksisterer i begrebet forbrugergrupper, det vil sige group.id samme slags forbrugere, som tilhører en forbrugergruppe, og alle forbrugerne i gruppen koordinerer for at forbruge alle partitionerne i abonnementsemnet. Selvfølgelig kan hver partition kun forbruges af forbrugere i samme forbrugergruppe, så hvordan fordeler forbrugere i samme forbrugergruppe de data, som partitionen skal bruges i? For et simpelt eksempel, hvis der er partitioner, der taber, det vil sige, når antallet af partitoner er det samme som antallet af komsumerer, svarer hver komsumer til en partition, hvis antallet af komsumere er mere end partitionerne, vil det ekstra antal komsumere ikke fungere, tværtimod vil der være komsumere, der forbruger flere partitioner.

Strategi for zonefordeling:

I kafka findes der to partitionallokeringsstrategier, den ene er Range (standard) og den anden er RoundRobin (polling). Dette sættes af komsumerens konfigurationsparameter partition.assignment.strategy.


Se alle emner


Se detaljer for et emne




 Udlejer| Opslået på 08/05/2021 17.17.33 |
Kafka sletter forbrugergrupper



Sletning af anmodede forbrugergrupper ('itsvse') var succesfuld.


Følgende fejl kan rapporteres:

Error: Deletion of some consumer groups failed:
* Gruppe 'itsvse' kunne ikke slettes på grund af: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.GroupNotEmptyException: Gruppen er ikke tom.
opløsning

Forbrug alle beskeder, eller sæt en offset

Kafka indstiller manuelt offset-offset
https://www.itsvse.com/thread-9641-1-1.html
Så slet det igen!

 Udlejer| Opslået på 13/04/2021 15.40.48 |
Power Shell-kommando



Hver forbrugerklient opretholder 2 forbindelser til Kafka-tjenesten
 Udlejer| Opslået på 07/05/2021 12.37.06 |
Kafka, for at se antallet af stakke af emner under en specificeret gruppe

Opslået på 16/06/2021 12.41.09 |
Spørg venligst, hvorfor koden ikke kan vises~
 Udlejer| Opslået på 25/06/2021 10.50.06 |
Kafka får kommandoen om emnestørrelse:



 Udlejer| Opslået på 18/07/2021 10.15.01 |
Kafka-kommandolinjen til at oprette emner:

Opslået på 03/09/2021 11.52.41 |
Der er stadig mange faldgruber i kafka, lært
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com