Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 129246|Odpověď: 17

[Zdroj] Operace Kafka pro fronty zpráv .NET/C# [se zdrojovým kódem]

[Kopírovat odkaz]
Zveřejněno 13.04.2021 11:45:31 | | | |
Kafka je vysoce výkonný distribuovaný systém pro zasílání zpráv vyvinutý společností LinkedIn, který je široce využíván v situacích jako je sběr logů, zpracování streamovaných dat, online i offline distribuce zpráv a další. Ačkoliv není navržen jako tradiční MQ, Kafaka může ve většině případů nahradit tradiční komunikační systémy, jako je ActiveMQ.

Kafka organizuje tok zpráv podle témat a server, který zprávy uchovává, se nazývá broker, a spotřebitelé se mohou přihlásit k odběru jednoho nebo více témat. Aby bylo vyrovnáno zátěž, lze zprávy tématu rozdělit do více oddílů, a čím více oddílů, tím vyšší paralelizm a propustnost Kafky.

Kafka clustery vyžadují podporu Zookeeperu pro implementaci clusterů a Zookeeper je již zahrnut v nejnovější distribuci Kafka, kterou lze nasadit pro spuštění serveru Zookeeper a serveru Kafka současně, nebo použít jiné existující clustery Zookeeper.

Na rozdíl od tradičního MQ musí spotřebitelé offset uchovávat sami a při přijímání zpráv z Kafky stahují zprávy až po aktuálním offsetu. Kafkův klient Scala/Java už tuto část logiky implementuje tím, že offset ukládá do zookeeperu. Každý spotřebitel si může zvolit ID a spotřebitelé se stejným ID obdrží stejnou zprávu pouze jednou.Pokud všichni uživatelé tématu používají stejné ID, jedná se o tradiční frontu. Pokud každý spotřebitel používá jiné ID, jedná se o tradiční pub-sub.

Přezkoumání:

Přidejte ActiveMQ do systémových služeb pod Windows
https://www.itsvse.com/thread-6210-1-1.html

PočetČekajícíZpráv, Zprávy ve frontě, Zprávy...
https://www.itsvse.com/thread-4954-1-1.html

Shrnutí informací o ActiveMQ a RabbitMQ
https://www.itsvse.com/thread-4659-1-1.html

Do služby je přidán CentOS ActiveMQ
https://www.itsvse.com/thread-4617-1-1.html

Centos 6.2 64bitová instalace activemq tutoriál
https://www.itsvse.com/thread-4616-1-1.html

ActiveMQ5.15.3 se nepodařilo spustit a je hlášen UnsupportedClassVersionError
https://www.itsvse.com/thread-4615-1-1.html

Nastavení oprávnění tématu Activemq
https://www.itsvse.com/thread-4495-1-1.html

Uživatel jeho verze není oprávněn číst z: ActiveMQ.Advisory.TempQueue,Activ...
https://www.itsvse.com/thread-4476-1-1.html

C# ActiveMQ klient předplatuje zdrojový kód
https://www.itsvse.com/thread-4470-1-1.html

.net/c# activemq pro nastavení účtu připojení a hesla
https://www.itsvse.com/thread-4282-1-1.html

Nastavte uživatelské jméno a heslo pro téma a frontu ACTIVEMQ
https://www.itsvse.com/thread-4281-1-1.html

ActiveMQ upravuje heslo pro správu webu
https://www.itsvse.com/thread-4280-1-1.html

activemq persistentní úložiště je plné
https://www.itsvse.com/thread-4125-1-1.html

.NET/C# Příklad operace ActiveMQ [Zdrojový kód]
https://www.itsvse.com/thread-3907-1-1.html

Konfigurace uživatelských oprávnění Activemq
https://www.itsvse.com/thread-3906-1-1.html

Rozdíl mezi frontou activemq a Topic je v tom, že
https://www.itsvse.com/thread-3863-1-1.html

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

Trvalá nastavení předplatného ActiveMQ
https://www.itsvse.com/thread-3451-1-1.html

RabbitMQ BasicQos omezení spotřebitelského paralelního zpracování
https://www.itsvse.com/thread-4667-1-1.html

rabbitMQ Queue Queue Persistence zprávy [se zdrojovým kódem]
https://www.itsvse.com/thread-4657-1-1.html

【Practice】rabbitMQ konzole pro přidání informací o účtu
https://www.itsvse.com/thread-4655-1-1.html

Podrobná analýza mechanismu odezvy na zprávy RabbitMQ
https://www.itsvse.com/thread-4639-1-1.html

.net/c# Připojení .net/c# RabbitMQ – odpojení a opětovné připojení
https://www.itsvse.com/thread-4636-1-1.html

Úvod do tří výměnných režimů (fanout, přímý a tematický) v RabbitMQ
https://www.itsvse.com/thread-4635-1-1.html

【Practice】RabbitMQ instaluje plugin pro správu webu
https://www.itsvse.com/thread-4631-1-1.html

【Praktický boj】Návod na instalaci RabbitMQ pod Windows
https://www.itsvse.com/thread-4630-1-1.html
Spotřeba Kafky

1. Spotřebitelé stejného group_id, pouze jeden spotřebitel může konzumovat zprávy (Režim fronty

2. Spotřebitelé různých group_id dostávají stejné zprávy

Výhody Kafky

Distribuované a vysoce škálovatelné. Kafka clustery lze transparentně škálovat a přidávat nové servery do clusteru.

Vysoký výkon. Výkon Kafky výrazně převyšuje tradiční implementace MQ, jako jsou ActiveMQ a RabbitMQ, zejména Kafka, která také podporuje dávkové operace. Následující obrázek ukazuje výsledky zátěžového testu výkonu spotřebitelů LinkedIn:

Odolnost vůči chybám. Data z každé partition v Kafce jsou replikována na několik serverů. Když zprostředkovatel selže, služba ZooKeeper informuje producenta a spotřebitele, kteří přejdou k jinému makléři.

Nevýhody Kafky:

Opakujte zprávy. Kafka zaručuje, že každá zpráva bude doručena alespoň jednou, a i když je pravděpodobnost malá, existuje šance, že zpráva bude doručena vícekrát.
Zprávy jsou mimo pořadí. Ačkoliv zprávy uvnitř oddílu jsou zaručeně uspořádané, pokud má téma více oddílů, není zaručeno uspořádané doručení zpráv mezi oddíly.
Složitost. Kafka vyžaduje podporu clusterů Zookeeper a témata obvykle vyžadují manuální práci při vytváření, nasazení a údržbě, která jsou dražší než běžné fronty zpráv

.NET/C# fronta zpráv Kafka operace

Nejprve použijte .NET Core 3.1 k vytvoření dvou nových konzolových projektů, konkrétně Kafka-Consumer a Kafka-Producer

Použijte nuget k odkazování na balíček Confluent.Kafka takto, pomocí následujícího příkazu:

Adresa GitHubu:Přihlášení k hypertextovému odkazu je viditelné.

Nejprve spustíme program Producent, a pokud spustíme spotřebitele jako první, dostaneme následující chybu:
Došlo k chybě: Broker: Neznámé téma nebo oddíl

Tento článek vám pohltí prostředíEnableAutoOffsetStore je nepravdivý, tedy ručně nastavit offsetovou paměť (podobně jako u ruční potvrzovací zprávy)

Spotřebitelé si po konzumaci nenastavují OffsetStore

Zkuste použít producenta k vytvoření dvou zpráv, zapněte spotřebitelskou spotřebu, MaxPollIntervalMs = 10000 // 10 sekund bez manuálního nastavení, nechte ostatní klienty spotřebovat, samozřejmě to nebude spotřebováno jinými klienty do 10 sekund

MaxPollIntervalMs vysvětluje
Pro pokročilé uživatele maximální povolený čas na spotřebu zpráv mezi hovory (například rd_kafka_consumer_poll()). Pokud je tento interval překročen, spotřebitel je považován za neúspěšného a skupina je přebalancována tak, aby byla partition přiřazena jinému členovi spotřebitelské skupiny. Varování: Commity offsetu nemusí být v tuto chvíli možné. Poznámka: Doporučuje se nastavit "enable.auto.offset.store=false" pro aplikace, které zpracovávají dlouhou dobu, a poté explicitně uložit offset (pomocí offsets_store()) po zpracování zprávy*, aby se zajistilo, že offset nebude automaticky potvrzen před dokončením zpracování. Kontrolujte jednou za sekundu v intervalech po dvou. Pro více informací viz KIP-62.

Vizualizace jsou následující:



OffsetStore se nastavuje poté, co spotřebitel dokončí výdaje

kód

Po dokončení nastavení počkejte 10 sekund a stále to fungujeObdržel jsem poslední zprávu(Když se spotřebitel připojí k makléři,Začněte spotřebu z pozice offsetuPokud je nastaveno c.Commit(cr); Poslední zpráva nebude opakovaně přijímána.

Zobrazit zdrojový kód



commit offset + 1 commit a nakonec volat Librdkafka.topic_partition_list_destroy(cOffsets);

Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.

Nastavte jiný GroupId

Zkuste nastavit jiný GroupId pomocí parametru příkazové řádky a poté odesílejte zprávu přes producenta, jak je vidět na následujícím obrázku:



Jak clinet1, tak klient2Přijímejte historické zprávy, a poté, co producent odešle zprávu, oba téměř budouPřijímejte zprávy současně

Noví spotřebitelé dostávají pouze nové zprávy

Jak donutit, aby nový klient dostával pouze nové zprávy a ignoroval historická data?

Prostředí je následující:

Jak je uvedeno níže:



Kód producenta

Následovně:

Spotřebitelský kodex

Následovně:

Stažení zdrojového kódu

Turisté, pokud chcete vidět skrytý obsah tohoto příspěvku, prosímOdpověď






Předchozí:.NET/C# Výjimka pomocí Tencent Enterprise Mailbox: Operace vypršela.
Další:NuGet vymaže cache
 Pronajímatel| Zveřejněno 15.04.2021 9:31:05 |
Když je .NET Kafka klient odpojen, nevyhodí výjimku a znovu se připojí poté, co je síť normální
%4|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Odpojeno (po 59926 ms ve státě UP)
%3|1618450028.267| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Odpojeno (po 59926 ms ve státě UP)
%3|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 0ms ve stavu CONNECT)
%3|1618450028.268| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 0ms ve stavu CONNECT)
%3|1618450028.357| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Připojení k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 10 ms ve stavu CONNECT, 1 identická chyba potlačena)
%3|1618450028.357| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 10 ms ve stavu CONNECT, 1 identická chyba potlačena)
%3|1618450062.882| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 0ms ve stavu CONNECT, 8 identických chyb potlačeno)
%3|1618450062.882| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 0 ms ve stavu CONNECT, 8 identických chyb potlačeno)
%3|1618450098.255| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 11 ms ve stavu CONNECT 4 identické chyby potlačeny)
%3|1618450098.255| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Připojení k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 11 ms ve stavu CONNECT, 4 identické chyby potlačeny)
%3|1618450138.243| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Připojení k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 0ms ve stavu CONNECT, 4 identické chyby potlačeny)
%3|1618450138.244| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 0 ms ve stavu CONNECT, 4 identické chyby potlačeny)
%3|1618450168.254| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Připojení k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 10 ms ve stavu CONNECT 3 identické chyby potlačeny)
%3|1618450168.254| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Připojit se k ipv4#192.168.1.175:9092 selhalo: Neznámá chyba (po 10 ms ve stavu CONNECT, 3 identické chyby potlačeny)

 Pronajímatel| Zveřejněno 13.04.2021 16:26:58 |
Princip konzumace zpráv:

V reálném produkčním procesu bude mít každý subjekt více oddílů a výhodou více oddílů je, že na jedné straně možnost shardování dat na brokerovi efektivně snižuje kapacitu zpráv a zlepšuje výkon IO. Na druhou stranu, aby se zlepšila spotřební síla spotřebitele, bude stejné téma obvykle konzumováno více spotřebiteli, tedy mechanismus vyvažování zátěže na straně spotřebitele, což je to, čemu porozumíme dále, jak spotřebitelé konzumují zprávy v případě více oddílů a více spotřebitelů? Kafka existuje v konceptu spotřebitelských skupin, tedy group.id stejného typu spotřebitelů, kteří patří do určité skupiny, a všichni spotřebitelé ve skupině se koordinují, aby spotřebovali všechny části tématu předplatného. Samozřejmě, každou partition mohou spotřebovat pouze spotřebitelé ve stejné skupině, takže jak tedy spotřebitelé ve stejné skupině přidělují data, ve kterých má být partpartence spotřebována? Pro jednoduchý příklad, pokud dochází k ztrátě oddílů, tedy když je počet částí stejný jako počet konzumérů, každý konzumátor odpovídá jedné části; pokud je počet konzumérů větší než počet oddílů, pak přebytečný počet konzumentů nebude fungovat, naopak budou konzumátoři, kteří spotřebovávají více oddílů.

Strategie územního rozdělení:

V Kafce existují dvě strategie alokace rozdělení, jedna je Range (výchozí) a druhá RoundRobin (polling). To je nastaveno parametrem konfigurace partition.assignment.strategy uživatele.


Zobrazit všechna témata


Zobrazit podrobnosti k tématu




 Pronajímatel| Zveřejněno 08.05.2021 17:17:33 |
Kafka maže spotřebitelské skupiny



Smazání požadovaných spotřebitelských skupin ("itsvse") bylo úspěšné.


Mohou být hlášeny následující chyby:

Error: Deletion of some consumer groups failed:
* Skupina 'itsvse' nemohla být smazána kvůli: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.GroupNotEmptyException: Skupina není prázdná.
řešení

Spotřebujte všechny zprávy nebo nastavte offset

Kafka ručně nastavuje offset offset
https://www.itsvse.com/thread-9641-1-1.html
Pak to znovu smažte!

 Pronajímatel| Zveřejněno 13.04.2021 15:40:48 |
Power shell příkaz



Každý spotřebitelský klient udržuje 2 připojení ke službě Kafka
 Pronajímatel| Zveřejněno 07.05.2021 12:37:06 |
Kafka, pro zobrazení počtu zásobníků témat v určené skupině

Zveřejněno 16.06.2021 12:41:09 |
Prosím, zeptejte se, proč kód nelze vidět~
 Pronajímatel| Zveřejněno 25.06.2021 10:50:06 |
Kafka dostane příkaz pro velikost tématu:



 Pronajímatel| Zveřejněno 18.07.2021 10:15:01 |
Kafka příkazový řádek pro tvorbu témat:

Zveřejněno 03.09.2021 11:52:41 |
Stále existuje mnoho nástrah v Kafkově praxi, naučil jsem se
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com