Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 129246|Svar: 17

[Källa] Kafka-operationer för .NET/C#-meddelandeköer [med källkod]

[Kopiera länk]
Publicerad på 2021-04-13 11:45:31 | | | |
Kafka är ett högpresterande, distribuerat meddelandesystem utvecklat av LinkedIn som används i stor utsträckning i scenarier som logginsamling, strömmande databehandling, online- och offline-meddelandedistribution och mer. Även om det inte är designat som en traditionell MQ kan Kafaka i de flesta fall ersätta traditionella meddelandesystem som ActiveMQ.

Kafka organiserar flödet av meddelanden efter ämnen, och servern som håller meddelandena kallas en mäklare, och konsumenter kan prenumerera på ett eller flera ämnen. För att balansera belastningen kan meddelandena i ett ämne delas in i flera partitioner, och ju fler partitioner, desto högre parallellism och genomströmning hos Kafka.

Kafka-kluster kräver zookeeper-stöd för att implementera kluster, och zookeeper ingår redan i den senaste Kafka-distributionen, som kan distribueras för att starta en zookeeper-server och en Kafka-server samtidigt, eller använda andra befintliga zookeeper-kluster.

Till skillnad från traditionell MQ behöver konsumenter behålla en offset själva, och när de får meddelanden från kafka, hämtar de bara meddelanden efter den aktuella offseten. Kafkas scala/java-klient implementerar redan denna del av logiken genom att spara offsetet till zookeepern. Varje konsument kan välja ett ID, och konsumenter med samma ID får bara samma meddelande en gång.Om konsumenter av ett ämne alla använder samma id är det en traditionell kö. Om varje konsument använder ett eget ID är det en traditionell pub-sub.

Recension:

Lägg till ActiveMQ i systemtjänster under Windows
https://www.itsvse.com/thread-6210-1-1.html

AntalPåVäntandeMeddelanden, MeddelandeKö, Meddelande...
https://www.itsvse.com/thread-4954-1-1.html

Sammanfattning av information om ActiveMQ och RabbitMQ
https://www.itsvse.com/thread-4659-1-1.html

CentOS ActiveMQ läggs till i tjänsten
https://www.itsvse.com/thread-4617-1-1.html

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

ActiveMQ5.15.3 startar inte och UnsupportedClassVersionError rapporteras
https://www.itsvse.com/thread-4615-1-1.html

Activemq ämnesbehörighetsinställningar
https://www.itsvse.com/thread-4495-1-1.html

Användaren itsvse är inte auktoriserad att läsa från: ActiveMQ.Advisory.TempQueue,Activ...
https://www.itsvse.com/thread-4476-1-1.html

C# ActiveMQ-klient prenumererar på källkod
https://www.itsvse.com/thread-4470-1-1.html

.net/c# activemq för att ställa in anslutningskonto och lösenord
https://www.itsvse.com/thread-4282-1-1.html

Sätt användarnamn och lösenord för ACTIVEMQ-temat och köen
https://www.itsvse.com/thread-4281-1-1.html

ActiveMQ ändrar lösenordet för webbplatshanteringen
https://www.itsvse.com/thread-4280-1-1.html

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

.NET/C# Exempel på en ActiveMQ-operation [Källkod]
https://www.itsvse.com/thread-3907-1-1.html

Activemq användarbehörighetskonfiguration
https://www.itsvse.com/thread-3906-1-1.html

Skillnaden mellan activemq Queue och Topic är att
https://www.itsvse.com/thread-3863-1-1.html

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

ActiveMQ persistenta prenumerationsinställningar
https://www.itsvse.com/thread-3451-1-1.html

RabbitMQ BasicQos konsument parallell processeringsgräns
https://www.itsvse.com/thread-4667-1-1.html

rabbitMQ Queue Queue Message Persistence [med källkod]
https://www.itsvse.com/thread-4657-1-1.html

【Practice】rabbitMQ console för att lägga till kontoinformation
https://www.itsvse.com/thread-4655-1-1.html

En djupgående analys av mekanismen bakom RabbitMQ-meddelandesvar
https://www.itsvse.com/thread-4639-1-1.html

.net/c# RabbitMQ-anslutningsavkoppling - frånkoppling och återanslutning
https://www.itsvse.com/thread-4636-1-1.html

Introduktion till de tre utbyteslägena (fanout, direkt och ämne) i RabbitMQ
https://www.itsvse.com/thread-4635-1-1.html

【Practice】RabbitMQ installerar webbhanteringspluginet
https://www.itsvse.com/thread-4631-1-1.html

【Practical Combat】RabbitMQ installationshandledning under Windows
https://www.itsvse.com/thread-4630-1-1.html
Kafkakonsumtion

1. Konsumenter av samma group_id, endast en konsument kan konsumera meddelanden (kö-kö-läge

2. Konsumenter av olika group_id får samma nyheter

Fördelar med Kafka

Distribuerat och mycket skalbart. Kafka-kluster kan skalas transparent för att lägga till nya servrar i klustret.

Hög prestanda. Kafkas prestanda överträffar vida traditionella MQ-implementationer som ActiveMQ och RabbitMQ, särskilt Kafka, som också stödjer batchoperationer. Följande bild visar resultaten från LinkedIns konsumentprestandatest:

Feltolerans. Data från varje partition i Kafka replikeras till flera servrar. När en mäklare misslyckas meddelar ZooKeeper-tjänsten producenten och konsumenten, som sedan byter till en annan mäklare.

Nackdelar med Kafka:

Upprepa meddelanden. Kafka garanterar bara att varje meddelande levereras minst en gång, och även om oddsen är små finns det en chans att ett meddelande levereras flera gånger.
Nyheterna är ur ordning. Även om meddelanden inom en partition garanteras vara ordnade, är det inte garanterat att meddelandeleveransen mellan partitioner är ordnad om ett ämne har flera partitioner.
Komplexitet. Kafka kräver stöd från zookeeper-kluster, och ämnen kräver vanligtvis manuellt arbete för att skapa, distribuera och underhålla dyrare än vanliga meddelandeköer

.NET/C# meddelandekö Kafka-operationer

Först, använd .NET Core 3.1 för att skapa två nya konsolprojekt, nämligen Kafka-Consumer och Kafka-Producer

Använd nuget för att referera till Confluent.Kafka-paketet så här, med följande kommando:

GitHub-adress:Inloggningen med hyperlänken är synlig.

Vi startar Producer-programmet först, och om vi startar konsumenten först får vi följande fel:
Fel uppstod: Mäklare: Okänt ämne eller partition

Den här artikeln kommer att ta upp inställningarnaEnableAutoOffsetStore är falsk, det vill säga manuellt att ställa in offset-lagringen (liknande ett manuellt bekräftelsemeddelande)

Konsumenter ställer inte in OffsetStore efter konsumtion

Försök använda producenten för att producera två meddelanden, slå på konsumentförbrukning, MaxPollIntervalMs = 10000 // 10 sekunder utan manuell inställning, låt andra klienter konsumera, självklart kommer det inte att konsumeras av andra klienter inom 10 sekunder

MaxPollIntervalMs förklarar
För avancerade konsumenter är den maximala tillåtna tiden att konsumera meddelanden mellan samtal (till exempel rd_kafka_consumer_poll()). Om detta intervall överskrids anses konsumenten ha misslyckats och gruppen balanseras om så att partitionen tilldelas en annan medlem i konsumentgruppen. Varning: Offset-commits kan vara omöjliga just nu. Observera: Det rekommenderas att ställa in "enable.auto.offset.store=false" för applikationer som bearbetar under lång tid, och sedan uttryckligen lagra offsetet (med offsets_store()) efter att meddelandet har behandlats* för att säkerställa att offsetet inte automatiskt committeras innan bearbetningen är klar. Kontrollera en gång per sekund med två intervaller. För mer information, se KIP-62.

Renderingarna är följande:



OffsetStore är inställd efter att konsumenten har avslutat sina utgifter

kod

När installationen är klar, vänta 10 sekunder så gör den det fortfarandeMottagit det sista meddelandet(När konsumenten kopplar upp sig till mäklaren,Starta konsumtionen från offset-positionenOm c.Commit(cr) är satt; Det sista meddelandet kommer inte att tas emot upprepade gånger.

Visa källkod



commit offset + 1 commit, och anropa slutligen Librdkafka.topic_partition_list_destroy(cOffsets);

Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.

Sätt ett annat GroupId

Prova att ställa in ett annat GroupId via kommandoradsparametern och skicka sedan ett meddelande via producenten, som visas i följande bild:



Både clinet1 och klient2Ta emot historiska meddelanden, och efter att producenten skickat ut ett meddelande, kommer båda nästan att varaTa emot meddelanden samtidigt

Nya konsumenter får bara nya meddelanden

Hur får man en ny kund att bara ta emot nya meddelanden och ignorera historisk data?

Inställningarna är följande:

Som visas nedan:



Producentkod

Följande följer:

Konsumentkod

Följande följer:

Källkodsnedladdning

Turister, om ni vill se det dolda innehållet i detta inlägg, snällaSvar






Föregående:.NET/C# Undantag med Tencent Enterprise Mailbox: Operationen har gått ut på tidsgränsen.
Nästa:NuGet rensar cachen
 Hyresvärd| Publicerad på 2021-04-15 09:31:05 |
När .NET Kafka-klienten kopplas bort kastar den inget undantag och ansluter igen efter att nätverket är normalt
%4|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Frånkopplad (efter 59926 ms i tillstånd UP)
%3|1618450028.267| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Frånkopplad (efter 59926 ms i state UP)
%3|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 0 ms i tillståndet CONNECT)
%3|1618450028.268| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 0 ms i tillståndet CONNECT)
%3|1618450028.357| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koppla upp till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 10 ms i tillstånd CONNECT, 1 identiskt fel/fel undertryckt)
%3|1618450028.357| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koppla till IPv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 10 ms i tillstånd CONNECT, 1 identiskt fel/fel undertryckt)
%3|1618450062.882| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 0 ms i tillstånd CONNECT, 8 identiska fel(er) undertryckta)
%3|1618450062.882| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 0 ms i tillstånd CONNECT, 8 identiska fel/fel undertryckta)
%3|1618450098.255| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 11 ms i tillstånd CONNECT, 4 identiska fel(er) undertryckta)
%3|1618450098.255| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 11 ms i tillstånd CONNECT, 4 identiska fel(ar) undertryckta)
%3|1618450138.243| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 0 ms i tillstånd CONNECT, 4 identiska fel(ar) undertryckta)
%3|1618450138.244| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koppla till IPv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 0 ms i tillståndet CONNECT, 4 identiska fel(ar) undertryckta)
%3|1618450168.254| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Koppla till ipv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 10 ms i tillstånd CONNECT, 3 identiska fel(ar) undertryckta)
%3|1618450168.254| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Koppla till IPv4#192.168.1.175:9092 misslyckades: Okänt fel (efter 10 ms i tillstånd CONNECT, 3 identiska fel(ar) undertryckta)

 Hyresvärd| Publicerad på 2021-04-13 16:26:58 |
Principen för meddelandekonsumtion:

I själva produktionsprocessen kommer varje ämne att ha flera partitioner, och fördelen med flera partitioner är att möjligheten att sharda data på mäklaren effektivt minskar kapaciteten på meddelanden och förbättrar IO-prestandan. Å andra sidan, för att förbättra konsumentsidans konsumtionskraft, kommer samma ämne vanligtvis att konsumeras av flera konsumenter, det vill säga lastbalanseringsmekanismen på konsumentsidan, vilket är vad vi kommer att förstå härnäst: hur konsumenter konsumerar meddelanden vid flera partitioner och flera konsumenter? Kafka existerar inom begreppet konsumentgrupper, det vill säga group.id samma typ av konsumenter, som tillhör en konsumentgrupp, och alla konsumenter i gruppen koordinerar för att konsumera alla partitioner av prenumerationsämnet. Självklart kan varje partition bara konsumeras av konsumenter i samma konsumentgrupp, så hur fördelar konsumenter i samma konsumentgrupp den data där partitionen ska konsumeras? Som ett enkelt exempel, om partitioner förlorar, det vill säga när antalet partitoner är detsamma som antalet komsumerare, motsvarar varje komsumör en partition, om antalet komsumörer är fler än partitionerna, så fungerar inte det extra antalet komsumerer, tvärtom kommer det att finnas komsumörer som förbrukar flera partitioner.

Strategi för zonindelar:

I kafka finns två partitionallokeringsstrategier, en är Range (standard) och den andra är RoundRobin (polling). Detta sätts av komsumerens konfigurationsparameter partition.assignment.strategy.


Se alla ämnen


Visa detaljer för ett ämne




 Hyresvärd| Publicerad på 2021-05-08 17:17:33 |
Kafka tar bort konsumentgrupper



Radering av begärda konsumentgrupper ('itsvse') var framgångsrik.


Följande fel kan rapporteras:

Error: Deletion of some consumer groups failed:
* Gruppen 'itsvse' kunde inte raderas på grund av: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.GroupNotEmptyException: Gruppen är inte tom.
lösning

Konsumera alla meddelanden, eller sätt en offset

Kafka ställer manuellt in offsetoffset
https://www.itsvse.com/thread-9641-1-1.html
Sedan raderar du det igen!

 Hyresvärd| Publicerad på 2021-04-13 15:40:48 |
Power Shell Command



Varje konsumentklient upprätthåller två anslutningar till Kafka-tjänsten
 Hyresvärd| Publicerad på 2021-05-07 12:37:06 |
Kafka, för att se antalet staplar av ämnen under en specificerad grupp

Publicerad på 2021-06-16 12:41:09 |
Vänligen fråga varför koden inte kan ses~
 Hyresvärd| Publicerad på 2021-06-25 10:50:06 |
Kafka får kommandot för ämnesstorlek:



 Hyresvärd| Publicerad på 2021-07-18 10:15:01 |
Kafka-kommandorad för att skapa ämnen:

Publicerad på 2021-09-03 11:52:41 |
Det finns fortfarande många fallgropar i kafka, lärt
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com