Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 129246|Svare: 17

[Kilde] Kafka-operasjoner for .NET/C#-meldingskøer [med kildekode]

[Kopier lenke]
Publisert på 13.04.2021 11:45:31 | | | |
Kafka er et høytytende, distribuert meldingssystem utviklet av LinkedIn som er mye brukt i scenarier som logginnsamling, strømming av data, online og offline meldingsdistribusjon, og mer. Selv om det ikke er designet som en tradisjonell MQ, kan Kafaka i de fleste tilfeller erstatte tradisjonelle meldingssystemer som ActiveMQ.

Kafka organiserer flyten av meldinger etter temaer, og serveren som holder meldingene kalles en megler, og forbrukere kan abonnere på ett eller flere temaer. For å balansere belastningen kan meldingene i et tema deles inn i flere partisjoner, og jo flere partisjoner, desto høyere parallellisme og gjennomstrømning i Kafka.

Kafka-klynger krever Zookeeper-støtte for å implementere klynger, og Zookeeper er allerede inkludert i den nyeste Kafka-distribusjonen, som kan distribueres for å starte en Zookeeper-server og en Kafka-server samtidig, eller bruke andre eksisterende Zookeeper-klynger.

I motsetning til tradisjonell MQ må forbrukerne beholde en offset alene, og når de mottar meldinger fra Kafka, henter de kun meldinger etter gjeldende offset. Kafkas scala/java-klient implementerer allerede denne delen av logikken ved å lagre offset til zookeeperen. Hver forbruker kan velge en ID, og forbrukere med samme ID vil bare motta den samme meldingen én gang.Hvis alle brukere av et tema bruker samme id, er det en tradisjonell kø. Hvis hver forbruker bruker en forskjellig ID, er det en tradisjonell pub-sub.

Anmeldelse:

Legg til ActiveMQ i systemtjenester under Windows
https://www.itsvse.com/thread-6210-1-1.html

AntalAvPendMeldinger, MeldingerKø, Meldinger...
https://www.itsvse.com/thread-4954-1-1.html

Sammendrag av informasjon om ActiveMQ og RabbitMQ
https://www.itsvse.com/thread-4659-1-1.html

CentOS ActiveMQ legges til tjenesten
https://www.itsvse.com/thread-4617-1-1.html

Centos 6.2 64-bits installasjon activemq veiledning
https://www.itsvse.com/thread-4616-1-1.html

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

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

Bruker itsvse er ikke autorisert til å lese fra: ActiveMQ.Advisory.TempQueue,Activ...
https://www.itsvse.com/thread-4476-1-1.html

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

.net/c# activemq for å sette tilkoblingskontoen og passordet
https://www.itsvse.com/thread-4282-1-1.html

Sett brukernavn og passord for ACTIVEMQ-temaet og køen
https://www.itsvse.com/thread-4281-1-1.html

ActiveMQ endrer passordet til nettsideadministrasjon
https://www.itsvse.com/thread-4280-1-1.html

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

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

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

Forskjellen mellom activemq Queue og Topic er at
https://www.itsvse.com/thread-3863-1-1.html

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

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

RabbitMQ BasicQos forbruker parallell prosesseringsgrense
https://www.itsvse.com/thread-4667-1-1.html

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

【Practice】rabbitMQ console for å legge til kontoinformasjon
https://www.itsvse.com/thread-4655-1-1.html

En grundig analyse av mekanismen bak RabbitMQ-meldingsvaret
https://www.itsvse.com/thread-4639-1-1.html

.net/c# RabbitMQ-tilkobling frakoblet - frakobling og rekobling
https://www.itsvse.com/thread-4636-1-1.html

Introduksjon til de tre utvekslingsmodusene (fanout, direkte og tema) i RabbitMQ
https://www.itsvse.com/thread-4635-1-1.html

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

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

1. Forbrukere av samme group_id, kun én forbruker kan konsumere meldinger (kø-kø-modus

2. Forbrukere av ulike group_id mottar de samme nyhetene

Fordeler med Kafka

Distribuert og svært skalerbart. Kafka-klynger kan skaleres transparent for å legge til nye servere i klyngen.

Høy ytelse. Kafkas ytelse overgår langt tradisjonelle MQ-implementasjoner som ActiveMQ og RabbitMQ, spesielt Kafka, som også støtter batchoperasjoner. Følgende bilde viser resultatene fra LinkedIns stresstest for forbrukerytelse:

Feiltoleranse. Data fra hver partisjon i Kafka replikeres til flere servere. Når en megler mislykkes, vil ZooKeeper-tjenesten varsle produsenten og forbrukeren, som deretter bytter til en annen megler.

Ulemper med Kafka:

Gjenta meldinger. Kafka garanterer bare at hver melding vil bli levert minst én gang, og selv om sjansene er små, er det en sjanse for at en melding blir levert flere ganger.
Nyhetene er ute av rekkefølge. Selv om meldinger inne i en partisjon er garantert å være ordnede, er det ikke garantert at meldingsleveransen mellom partisjonene er ordnet hvis et emne har flere partisjoner.
Kompleksitet. Kafka krever støtte fra dyrepasserklynger, og emner krever vanligvis manuelt arbeid for å opprette, distribuere og vedlikeholde dyrere enn vanlige meldingskøer

.NET/C# meldingskø Kafka-operasjoner

Først, bruk .NET Core 3.1 for å lage to nye konsollprosjekter, nemlig Kafka-Consumer og Kafka-Producer

Bruk nuget for å referere til Confluent.Kafka-pakken slik, med følgende kommando:

GitHub-adresse:Innloggingen med hyperkoblingen er synlig.

Vi starter Producer-programmet først, og hvis vi starter forbrukeren først, får vi følgende feil:
Feil oppstod: Megler: Ukjent emne eller partisjon

Denne artikkelen vil ta for seg innstillingerEnableAutoOffsetStore er feil, det vil si å manuelt sette offset-lagringen (lignende en manuell bekreftelsesmelding)

Forbrukere setter ikke OffsetStore etter forbruk

Prøv å bruke produsenten til å lage to meldinger, slå på forbrukerforbruk, MaxPollIntervalMs = 10000 // 10 sekunder uten manuell innstilling, la andre klienter konsumere, selvfølgelig vil det ikke bli konsumert av andre klienter innen 10 sekunder

MaxPollIntervalMs forklarer
For avanserte forbrukere er maksimal tillatt tid til å konsumere meldinger mellom samtaler (for eksempel rd_kafka_consumer_poll()). Hvis dette intervallet overskrides, anses forbrukeren som feilet, og gruppen rebalanseres slik at partisjonen tildeles et annet medlem av forbrukergruppen. Advarsel: Offset-commits er kanskje ikke mulig på nåværende tidspunkt. Merk: Det anbefales å sette "enable.auto.offset.store=false" for applikasjoner som behandler lenge, og deretter eksplisitt lagre offset (ved å bruke offsets_store()) etter at meldingen er behandlet* for å sikre at offset ikke automatisk committeres før behandlingen er fullført. Sjekk én gang i sekundet med to intervaller. For mer informasjon, se KIP-62.

Gjengivelsene er som følger:



OffsetStore settes etter at forbrukeren er ferdig med å bruke penger.

kode

Etter at oppsettet er fullført, vent 10 sekunder, så vil det fortsatt fungereMottok siste melding(Når forbrukeren kobler seg til megleren,Start forbruket fra offsetposisjonenHvis c.Commit(cr) er satt; Den siste meldingen vil ikke bli mottatt gjentatte ganger.

Se kildekode



commit offset + 1 commit, og til slutt kall Librdkafka.topic_partition_list_destroy(cOffsets);

Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.

Sett en annen GroupId

Prøv å sette en annen GroupId via kommandolinjeparameteren, og send deretter en melding gjennom produsenten, som vist i bildet nedenfor:



Både clinet1 og client2Motta historiske meldinger, og etter at produsenten sender ut en melding, vil begge nesten væreMotta meldinger samtidig

Nye forbrukere mottar bare nye meldinger

Hvordan får du en ny klient til å motta kun nye meldinger og ignorere historiske data?

Innstillingene er som følger:

Som vist nedenfor:



Produsentkode

Som følger:

Forbrukerkode

Som følger:

Nedlasting av kildekode

Turister, hvis dere vil se det skjulte innholdet i dette innlegget, vær så snillSvare






Foregående:.NET/C# Unntak ved bruk av Tencent Enterprise Mailbox: Operasjonen har gått ut på tid.
Neste:NuGet tømmer cachen
 Vert| Publisert på 15.04.2021 09:31:05 |
Når .NET Kafka-klienten kobles fra, kaster den ikke et unntak og kobler til igjen etter at nettverket er normalt
%4|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Frakoblet (etter 59926 ms i tilstand UP)
%3|1618450028.267| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koblet fra (etter 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: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 0 ms i tilstanden CONNECT)
%3|1618450028.268| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 0 ms i tilstanden CONNECT)
%3|1618450028.357| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 10 ms i tilstand CONNECT, 1 identiske feil(er) undertrykt)
%3|1618450028.357| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 10 ms i tilstand CONNECT, 1 identisk feil undertrykt)
%3|1618450062.882| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 0 ms i tilstand CONNECT, 8 identiske feil(er) undertrykt)
%3|1618450062.882| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 0 ms i tilstand CONNECT, 8 identiske feil undertrykt)
%3|1618450098.255| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 11 ms i tilstand CONNECT, 4 identiske feil(er) undertrykt)
%3|1618450098.255| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 11 ms i tilstand CONNECT, 4 identiske feil undertrykt)
%3|1618450138.243| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koble til IPv4#192.168.1.175:9092 feilet: Ukjent feil (etter 0 ms i tilstand CONNECT, 4 identiske feil(er) undertrykt)
%3|1618450138.244| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koble til IPv4#192.168.1.175:9092 feilet: Ukjent feil (etter 0 ms i tilstand CONNECT, 4 identiske feil undertrykt)
%3|1618450168.254| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 10 ms i tilstand CONNECT, 3 identiske feil undertrykt)
%3|1618450168.254| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koble til ipv4#192.168.1.175:9092 feilet: Ukjent feil (etter 10 ms i tilstand CONNECT, 3 identiske feil undertrykt)

 Vert| Publisert på 13.04.2021 16:26:58 |
Prinsippet for meldingskonsum:

I selve produksjonsprosessen vil hvert emne ha flere partisjoner, og fordelen med flere partisjoner er at muligheten til å sharde dataene på megleren effektivt reduserer kapasiteten til meldinger og forbedrer IO-ytelsen. På den annen side, for å forbedre forbruksevnen på forbrukersiden, vil det samme temaet vanligvis bli konsumert gjennom flere forbrukere, det vil si lastfordelingsmekanismen på forbrukersiden, som vi vil forstå neste gang: hvordan konsumerer forbrukere meldinger i tilfelle av flere partisjoner og flere forbrukere? Kafka eksisterer i konseptet forbrukergrupper, det vil si group.id samme type forbrukere, som tilhører en forbrukergruppe, og alle forbrukerne i gruppen koordinerer for å konsumere alle partisjonene i abonnementstemaet. Selvfølgelig kan hver partisjon bare konsumeres av forbrukere i samme forbrukergruppe, så hvordan fordeler forbrukere i samme forbrukergruppe dataene som partisjonen skal brukes i? For et enkelt eksempel, hvis det er partisjoner som taper, det vil si når antallet partitoner er det samme som antall komsumerer, tilsvarer hver kommsumer en partisjon, hvis antallet komsumere er større enn partisjonene, vil ikke det ekstra antallet komsumere fungere, tvert imot vil det være komsumere som bruker flere partisjoner.

Strategi for reguleringsfordeling:

I kafka finnes det to partisjonsallokeringsstrategier, én er Range (standard) og den andre er RoundRobin (polling). Dette settes av komsumerens konfigurasjonsparameter partition.assignment.strategy.


Se alle temaer


Se detaljer for et tema




 Vert| Publisert på 08.05.2021 17:17:33 |
Kafka sletter forbrukergrupper



Sletting av forespurte forbrukergrupper ('itsvse') var vellykket.


Følgende feil kan rapporteres:

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

Konsumer alle meldinger, eller sett en offset

Kafka setter offset-offset manuelt
https://www.itsvse.com/thread-9641-1-1.html
Slett det igjen!

 Vert| Publisert på 13.04.2021 15:40:48 |
Power Shell Command



Hver forbrukerklient opprettholder 2 tilkoblinger til Kafka-tjenesten
 Vert| Publisert på 07.05.2021 12:37:06 |
Kafka, for å se antall stabler av emner under en spesifisert gruppe

Publisert på 16.06.2021 12:41:09 |
Vennligst spør hvorfor koden ikke kan vises~
 Vert| Publisert på 25.06.2021 10:50:06 |
Kafka får kommandoen om emnestørrelse:



 Vert| Publisert på 18.07.2021 10:15:01 |
Kafka-kommandolinje for å opprette emner:

Publisert på 03.09.2021 11:52:41 |
Det finnes fortsatt mange fallgruver i kafka, lært
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com