Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 129246|Yanıt: 17

[Kaynak] .NET/C# mesaj kuyrukları için Kafka işlemleri [kaynak kodu ile]

[Bağlantıyı kopyala]
Yayınlandı 13.04.2021 11:45:31 | | | |
Kafka, LinkedIn tarafından geliştirilen, günlük toplama, veri akışı, çevrimiçi ve çevrimdışı mesaj dağıtımı gibi senaryolarda yaygın olarak kullanılan yüksek performanslı, dağıtık bir mesajlaşma sistemidir. Geleneksel bir MQ olarak tasarlanmasa da, Kafaka çoğu durumda ActiveMQ gibi geleneksel mesajlaşma sistemlerinin yerini alabilir.

Kafka, mesaj akışını konulara göre düzenler ve mesajları saklayan sunucuya broker denir; tüketiciler bir veya daha fazla konuya abone olabilir. Yükü dengelemek için, bir konunun mesajları birden fazla bölüme ayrılabilir ve ne kadar çok bölüm olursa, Kafka'nın paralelliği ve verimliliği o kadar yüksek olur.

Kafka kümeleri kümeleri oluşturmak için zookeeper desteğine ihtiyaç duyar ve zookeeper zaten en son Kafka dağıtımında yer almaktadır; bu dağıtım aynı anda hem zookeeper sunucusu hem de Kafka sunucusu başlatabilir veya mevcut diğer zookeeper kümelerini kullanabilir.

Geleneksel MQ'nun aksine, tüketiciler bir ofseti kendi başlarına tutmalıdır ve kafka'dan mesaj alırken, sadece mevcut ofsetten sonra mesajları çekerler. Kafka'nın scala/java istemcisi, ofseti hayvanat bahçesi görevlisine kaydederek bu mantığın bu kısmını zaten uygular. Her tüketici bir kimlik seçebilir ve aynı kimliğe sahip tüketiciler aynı mesajı yalnızca bir kez alır.Bir konunun kullanıcıları aynı kimlik kullanıyorsa, bu geleneksel bir Kuyruk olur. Her tüketici farklı bir kimlik kullanıyorsa, bu geleneksel bir pub-sub'tır.

Eleştiri:

Windows altında sistem hizmetlerine ActiveMQ ekleyin
https://www.itsvse.com/thread-6210-1-1.html

BeklemedeMesajlar, MesajlarSırada, Mesaj...
https://www.itsvse.com/thread-4954-1-1.html

ActiveMQ ve RabbitMQ hakkında bilgi özeti
https://www.itsvse.com/thread-4659-1-1.html

CentOS ActiveMQ hizmete eklendi
https://www.itsvse.com/thread-4617-1-1.html

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

ActiveMQ5.15.3 başlatılamaz ve Desteklenmeyen Sınıf Versiyon Hatası bildirilir
https://www.itsvse.com/thread-4615-1-1.html

Activemq konu izin ayarları
https://www.itsvse.com/thread-4495-1-1.html

Kullanıcı itsvse şu adreslerden okumaya yetki yoktur: ActiveMQ.Advisory.TempQueue,Activ...
https://www.itsvse.com/thread-4476-1-1.html

C# ActiveMQ istemcisi kaynak koduna abone oluyor
https://www.itsvse.com/thread-4470-1-1.html

.net/c# activemq ile bağlantı hesabı ve şifre ayarlamak için
https://www.itsvse.com/thread-4282-1-1.html

ACTIVEMQ teması ve kuyruğu için kullanıcı adını ve şifresini ayarlayın
https://www.itsvse.com/thread-4281-1-1.html

ActiveMQ, Web Sitesi Yönetim Şifresini Değiştirir
https://www.itsvse.com/thread-4280-1-1.html

activemq Kalıcı depo dolu
https://www.itsvse.com/thread-4125-1-1.html

.NET/C# ActiveMQ işlem örneği [Kaynak kodu]
https://www.itsvse.com/thread-3907-1-1.html

Activemq kullanıcı izni yapılandırması
https://www.itsvse.com/thread-3906-1-1.html

activemq Queue ile Topic arasındaki fark şu
https://www.itsvse.com/thread-3863-1-1.html

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

ActiveMQ kalıcı abonelik ayarları
https://www.itsvse.com/thread-3451-1-1.html

RabbitMQ BasicQos tüketici paralel işleme sınırı
https://www.itsvse.com/thread-4667-1-1.html

rabbitMQ Kuyruk Kuyruğu Mesajı Kalıcılığı [kaynak kodu ile]
https://www.itsvse.com/thread-4657-1-1.html

【Pratik yap】rabbitMQ konsolu hesap bilgisi eklemek için
https://www.itsvse.com/thread-4655-1-1.html

RabbitMQ mesaj yanıtının mekanizmasının derinlemesine analizi
https://www.itsvse.com/thread-4639-1-1.html

.net/c# RabbitMQ bağlantı kopması - bağlantı kesme ve yeniden bağlantı
https://www.itsvse.com/thread-4636-1-1.html

RabbitMQ'nun üç değişim moduna (fanout, direct ve topic) giriş
https://www.itsvse.com/thread-4635-1-1.html

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

【Practical Combat】RabbitMQ kurulum eğitimi Windows altında
https://www.itsvse.com/thread-4630-1-1.html
Kafka tüketimi

1. Aynı group_id tüketicileri, yalnızca bir kullanıcı mesaj tüketebilir (Kuyruk kuyruğu modu

2. Farklı group_id tüketiciler aynı haberi alır

Kafka'nın Avantajları

Dağıtık ve yüksek ölçeklenebilir. Kafka kümeleri, kümelere yeni sunucular eklemek için şeffaf şekilde ölçeklenebilir.

Yüksek performans. Kafka'nın performansı, özellikle toplu işlemleri destekleyen Kafka gibi ActiveMQ ve RabbitMQ gibi geleneksel MQ uygulamalarının büyük ölçüde üstündedir. Aşağıdaki görsel, LinkedIn'in tüketici performans stres testinin sonuçlarını göstermektedir:

Hata toleransı. Kafka'daki her bölümden gelen veriler birkaç sunucuya çoğaltılır. Bir broker başarısız olduğunda, ZooKeeper hizmeti üreticiyi ve tüketiciyi bilgilendirir ve tüketici başka bir broker'a geçer.

Kafka'nın Dezavantajları:

Mesajları tekrar et. Kafka, her mesajın en az bir kez teslim edileceğini garanti eder ve olasılıklar düşük olsa da, bir mesajın birden fazla kez teslim edilme ihtimali vardır.
Haber sıradan çıktı. Bir bölüm içindeki mesajların düzenli olması garanti edilse de, bir konuda birden fazla bölüm varsa, bölümler arasındaki mesajın düzenli olması garanti edilmez.
Karmaşıklık. Kafka, hayvanat bahçesi görevlisi kümelerinin desteğini gerektirir ve konular genellikle genel mesaj kuyruklarından daha pahalı olan yapım, dağıtım ve bakım için manuel emeği gerektirir

.NET/C# mesaj kuyruğu Kafka operasyonları

İlk olarak, .NET Core 3.1 kullanarak Kafka-Consumer ve Kafka-Producer olmak üzere iki yeni konsol projesi oluşturun

Confluent.Kafka paketine şu şekilde referans vermek için nuget kullanın, aşağıdaki komutla:

GitHub adresi:Bağlantı girişi görünür.

Önce Üretici programını başlatırız ve önce tüketiciyi başlatırsak aşağıdaki hatayı alırız:
Hata meydana geldi: Broker: Bilinmeyen konu veya bölüm

Bu makale ayarları tüketecekEnableAutoOffsetStore yanlış, yani ofset depolamayı manuel olarak ayarlamak (manuel onay mesajına benzer)

Tüketiciler, tüketimden sonra OffsetStore'u ayarlamaz

Üreticiyi kullanarak iki mesaj üretmeye çalışın, tüketici tüketimini açın, MaxPollIntervalMs = 10000 // 10 saniye manuel ayar yapmadan, diğer istemcilerin tüketmesine izin verin, tabii ki 10 saniye içinde diğer istemci tarafından tüketilmez

MaxPollIntervalMs açıklar
İleri tüketiciler için ise maksimum mesaj kullanımı için arama süresi (örneğin, rd_kafka_consumer_poll()) olarak verilirdi. Bu aralık aşılırsa, tüketici başarısız sayılır ve grup yeniden dengelenir, böylece bölüm başka bir tüketici grubu üyesine yeniden atanır. Uyarı: Şu anda ofset commit'ler mümkün olmayabilir. Not: Uzun süre işlem gören uygulamalar için "enable.auto.offset.store=false" ayarlanması ve mesaj işlendikten sonra ofsetin otomatik olarak bağlanmaması için ofseti açıkça (offsets_store()) kullanarak* saklanması önerilir. Saniyede bir kez iki aralıkla kontrol edin. Daha fazla bilgi için KIP-62'ye bakınız.

Çizimler aşağıdaki gibidir:



OffsetStore, tüketici harcamayı tamamladıktan sonra ayarlanır

kod

Kurulum tamamlandıktan sonra 10 saniye bekleyin, yine de çalışıyorSon mesajı aldım(Tüketici aracı kuruma bağlandığında,Tüketimle ofset pozisyonundan başlatEğer c.Commit(cr) ayarlanmışsa; Son mesaj tekrar tekrar alınmayacak.

Kaynak kodunu görüntüle



commit +1 commit ve sonunda Librdkafka.topic_partition_list_destroy(cOffsets) çağırır;

Bağlantı girişi görünür.
Bağlantı girişi görünür.

Farklı bir GroupId kur

Komut satırı parametresi üzerinden farklı bir GroupId ayarlayın ve ardından üretici aracılığıyla bir mesaj gönderin, aşağıdaki görselde gösterildiği gibi:



Hem clinet1 hem de client2Tarihsel mesajlar alın, ve yapımcı bir mesaj gönderdikten sonra, ikisi de neredeyseMesajları aynı anda alın

Yeni tüketiciler sadece yeni mesajlar alır

Yeni bir müşteriye sadece yeni mesajlar gönderip geçmiş verileri görmezden gelmesini nasıl sağlarsınız?

Ayarlar şu şekildedir:

Aşağıda gösterildiği gibi:



Üretici kodu

Şöyle:

Tüketici kodu

Şöyle:

Kaynak kodu indirme

Turistler, bu gönderinin gizli içeriğini görmek isterseniz lütfenYanıt






Önceki:.NET/C# İstisnası, Tencent Enterprise Posta Kutusu kullanılıyor: İşlem zamanlamış.
Önümüzdeki:NuGet önbelleği temizler
 Ev sahibi| Yayınlandı 15.04.2021 09:31:05 |
.NET Kafka istemcisi bağlantısı kesildiğinde, istisna oluşturmaz ve ağ normal hale geldikten sonra yeniden bağlanır
%4|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Bağlantı kesildi (UP durumunda 59926ms sonra)
%3|1618450028.267| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Bağlantısı kesildi (59926ms state UP içinde sonra)
%3|1618450028.267| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 0ms sonra)
%3|1618450028.268| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlan başarısız oldu: Bilinmeyen hata (CONNECT durumunda 0ms sonra)
%3|1618450028.357| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 10ms sonra, 1 aynı hata bastırıldı)
%3|1618450028.357| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 10ms sonra, 1 aynı hata(lar) bastırıldı)
%3|1618450062.882| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 0ms sonra, 8 aynı hata bastırıldı)
%3|1618450062.882| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlan başarısız oldu: Bilinmeyen hata (CONNECT durumunda 0ms sonra, 8 aynı hata(lar) bastırıldı)
%3|1618450098.255| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 11ms sonra, 4 aynı hata bastırıldı)
%3|1618450098.255| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 11ms sonra, 4 aynı hata(lar) bastırıldı)
%3|1618450138.243| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 0ms sonra, 4 aynı hata(lar) bastırıldı)
%3|1618450138.244| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlan başarısız oldu: Bilinmeyen hata (CONNECT durumunda 0ms sonra, 4 aynı hata bastırıldı)
%3|1618450168.254| FAIL|rdkafka#consumer-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 10ms sonra, 3 aynı hata bastırıldı)
%3|1618450168.254| ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: ipv4#192.168.1.175:9092'ye bağlanma başarısız oldu: Bilinmeyen hata (CONNECT durumunda 10ms sonra, 3 aynı hata bastırıldı)

 Ev sahibi| Yayınlandı 13.04.2021 16:26:58 |
Mesaj tüketimi prensibi:

Gerçek üretim sürecinde, her konuda birden fazla bölüm olur ve birden fazla bölümün avantajı, bir yandan verileri aracıda paylaşabilme yeteneğinin mesajların kapasitesini etkili bir şekilde azaltması ve IO performansını artırmasıdır. Öte yandan, tüketici tarafının tüketim gücünü artırmak için aynı konu genellikle birden fazla tüketici tarafından tüketilir; yani tüketici tarafının yük dengeleme mekanizması da bu olacak; bundan sonra anlayacağız: Birden fazla bölüm ve birden fazla tüketici durumunda tüketiciler mesajları nasıl tüketir? Kafka, tüketici grupları kavramında vardır; yani aynı tür tüketiciler group.id bir tüketici grubuna ait ve gruptaki tüm tüketiciler abonelik konusunun tüm bölümlerini tüketmek için koordinasyon sağlar. Elbette, her bölüm yalnızca aynı tüketici grubundaki tüketiciler tarafından tüketilebilir, peki aynı tüketici grubundaki tüketiciler, tüketilmesi gereken verileri nasıl tahsis eder? Basit bir örnek olarak, eğer kaybeden bölümler varsa, yani partiton sayısı tüketici sayısıyla aynıysa, her tüketici bir bölüme karşılık gelir; tüketici sayısı bölümlerden fazlaysa, o zaman ekstra tüketici sayısı çalışmaz, aksine, birden fazla bölme tüketen tüketiciler olur.

Imar Atama Stratejisi:

Kafka'da iki bölme tahsis stratejisi vardır: biri Aralık (varsayılan), diğeri ise RoundRobin (anket). Bu, tüketicinin yapılandırma partition.assignment.strategy parametresi tarafından ayarlanır.


Tüm konuları gör


Bir konunun detaylarını görüntüleyin




 Ev sahibi| Yayınlandı 8.05.2021 17:17:33 |
Kafka tüketici gruplarını siliyor



İstenen tüketici gruplarının ('itsvse') silinmesi başarılı oldu.


Aşağıdaki hatalar bildirilebilir:

Error: Deletion of some consumer groups failed:
* 'itsvse' grubu şu nedenlerle silinemedi: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.GroupNotEmptyException: Grup boş değil.
çözüm

Tüm mesajları tüketin veya bir ofset belirleyin

Kafka ofset ofsetini manuel olarak ayarlar
https://www.itsvse.com/thread-9641-1-1.html
O zaman tekrar sil!

 Ev sahibi| Yayınlandı 13.04.2021 15:40:48 |
Power Shell Komutası



Her tüketici istemcisi, Kafka hizmetine 2 bağlantı sağlar
 Ev sahibi| Yayınlandı 7.05.2021 12:37:06 |
kafka, belirli bir grup altındaki konu yığınlarının sayısını görüntülemek için

Yayınlandı 16.06.2021 12:41:09 |
Lütfen kodun neden görüntülenemeyeceğini sorun~
 Ev sahibi| Yayınlandı 25.06.2021 10:50:06 |
Kafka konu boyutu komutunu alır:



 Ev sahibi| Yayınlandı 18.07.2021 10:15:01 |
Konu oluşturmak için Kafka komut satırı:

Yayınlandı 3.09.2021 11:52:41 |
Kafka'da hâlâ birçok tuzak var, öğrendim
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com