日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何在.NET中使用Kafka

如何在 .NET 中使用 Kafka

作者:碼農(nóng)讀書(shū) 2021-03-09 07:27:40

開(kāi)發(fā)

架構(gòu)

Kafka Kafka 是一個(gè)開(kāi)源的,分布式的,可擴(kuò)展的,高性能的發(fā)布訂閱模式的消息中間件,如果你要構(gòu)建一個(gè)處理海量數(shù)據(jù)的系統(tǒng),那么 Kafka 將會(huì)是一個(gè)非常好的選擇,這篇文章我們將會(huì)討論如何基于 Kakfa 構(gòu)建一個(gè)發(fā)布訂閱模式的程序。

為溧陽(yáng)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及溧陽(yáng)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、溧陽(yáng)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)讀書(shū)」,作者 碼農(nóng)讀書(shū)。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)讀書(shū)公眾號(hào)。

Kafka 是一個(gè)開(kāi)源的,分布式的,可擴(kuò)展的,高性能的發(fā)布訂閱模式的消息中間件,如果你要構(gòu)建一個(gè)處理海量數(shù)據(jù)的系統(tǒng),那么 Kafka 將會(huì)是一個(gè)非常好的選擇,這篇文章我們將會(huì)討論如何基于 Kakfa 構(gòu)建一個(gè)發(fā)布訂閱模式的程序。

Kafka 架構(gòu)

這一節(jié)中,先來(lái)看看 Kafka 的基礎(chǔ)架構(gòu)以及相關(guān)術(shù)語(yǔ),大體來(lái)說(shuō) Kafka 由下面幾個(gè)組件組成。

  • Kafka Cluster 一個(gè)或者多個(gè)服務(wù)器組成的集群
  • Producer 一個(gè)用于發(fā)布消息的組件。
  • Consumer 一個(gè)用于獲取并處理消息的組件。
  • ZooKeeper 一個(gè)中心化的協(xié)調(diào)組件,常用于保存分布式環(huán)境下各個(gè)節(jié)點(diǎn)的配置信息。

在 Kafka 中,數(shù)據(jù)的基本單元是 message,它是一個(gè) key-value 鍵值對(duì),kafka 會(huì)將所有的 message 轉(zhuǎn)換為 byte[],值得注意的是:生產(chǎn)者 和 消費(fèi)者 以及 cluster 集群之間都是采用 tcp 協(xié)議通訊的,kafka 集群中的每一臺(tái)機(jī)器都被稱為代理(broker),你可以非常容易的向集群添加機(jī)器實(shí)現(xiàn)容量的橫向擴(kuò)展。

下面的圖展示了 kafka 的基礎(chǔ)架構(gòu)。

kafka 中的 topic 表示 message 的邏輯集合,如果不明白的話,你可以認(rèn)為 topic 就是 category (分類),category 下自然就是歸類的 message,這些 message 是由 生產(chǎn)者 產(chǎn)生。

kafka server 中會(huì)包含一個(gè)或者多個(gè) topics,每一個(gè) topics 又可以包含一個(gè)或者多個(gè) partitions(分區(qū)),partition 被定義為一個(gè)有序的消息序列,值得注意的是 partitions 是 kafka 能夠動(dòng)態(tài)擴(kuò)展的關(guān)鍵,換句話說(shuō) partition 可以分布在多個(gè) kafka server 上,具體操作流程為:kafka 中的 生產(chǎn)者 將 message 推送到指定的 topic,訂閱該 topic 的 消費(fèi)者 就可以拿到該消息。

Kafka 和 RabbitMQ 比較

Kafka 和 RabbitMQ 都是非常流行的,開(kāi)源的 消息中間件,那什么時(shí)候應(yīng)該選擇 Kakfa 而不是 RabbitMQ 呢?主要考慮如下幾點(diǎn)。

  • RabbitMQ 是由高性能語(yǔ)言 Erlang 編寫(xiě)的,它擁有豐富的 路由機(jī)制 和強(qiáng)大的 消息確認(rèn)機(jī)制, 同時(shí) RabbitMQ 還提供了一個(gè)可視化的 WebUI 界面,可以通過(guò)它監(jiān)視 RabbitMQ 的運(yùn)行狀態(tài),但如果你有大規(guī)模部署的需求,RabbitMQ 就沒(méi)有 Kafka 好使了,因?yàn)楹笳叩臄U(kuò)容只需要增加 partitions 就可以了。
  • RabbitMQ Cluster 會(huì)存在經(jīng)典的 腦裂問(wèn)題,需要使用單獨(dú)的插件支持(federations)。
  • Kafka 在性能上遠(yuǎn)超 RabbitMQ,單節(jié)點(diǎn)的 Kafka 能夠處理 10w/s 條記錄,而 RabbitMQ 大概只能處理 2w/s 條記錄。

構(gòu)建 生產(chǎn)者 和 消費(fèi)者

這一節(jié)我們來(lái)討論如何為 Kafka 構(gòu)建生產(chǎn)者和消費(fèi)者,這就需要構(gòu)建兩個(gè) Console 程序分別充當(dāng)各自角色,大家可以用 nuget 安裝一下 kafka-net,命令如下:

  
 
 
 
  1. Install-Package kafka-net

構(gòu)建 生產(chǎn)者 Console

  
 
 
 
  1. static void Main(string[] args)
  2.         {
  3.             string payload ="Welcome to Kafka!";
  4.             string topic ="IDGTestTopic";
  5.             Message msg = new Message(payload);
  6.             Uri uri = new Uri("http://localhost:9092");
  7.             var options = new KafkaOptions(uri);
  8.             var router = new BrokerRouter(options);
  9.             var client = new Producer(router);
  10.             client.SendMessageAsync(topic, new List { msg }).Wait();
  11.             Console.ReadLine();
  12.         }

構(gòu)建 消費(fèi)者 Console

  
 
 
 
  1. static void Main(string[] args)
  2.         {
  3.             string topic ="IDGTestTopic";
  4.             Uri uri = new Uri("http://localhost:9092");
  5.             var options = new KafkaOptions(uri);
  6.             var router = new BrokerRouter(options);
  7.             var consumer = new Consumer(new ConsumerOptions(topic, router));
  8.             foreach (var message in consumer.Consume())
  9.             {
  10.                 Console.WriteLine(Encoding.UTF8.GetString(message.Value));
  11.             }
  12.             Console.ReadLine();
  13.         }

最后可以依次將 生產(chǎn)者 和 消費(fèi)者 程序啟動(dòng)起來(lái),然后你就會(huì)看到 消費(fèi)者 Console 上顯示:Welcome to Kafka! 。

其實(shí)在開(kāi)源世界中有太多的消息中間件,比如:RabbitMQ, MSMQ, IBM MQ Series 等等,現(xiàn)在的 Kafka 不僅僅是 消息中間件 了,而是用于大數(shù)據(jù)的 流式處理平臺(tái),Kafka 也常常用于 IOT 程序,日志聚合 和 其他低延遲,強(qiáng)消息保證 等場(chǎng)景,如果你的應(yīng)用程序需要一個(gè)快速并可擴(kuò)展的消息中間件,kafka 將會(huì)是一個(gè)非常好的選擇,后續(xù)我會(huì)分享更多的關(guān)于 kafka 的文章。

譯文鏈接:https://www.infoworld.com/article/3215165/how-to-use-apache-kafka-messaging-in-net.html


文章標(biāo)題:如何在.NET中使用Kafka
瀏覽地址:http://www.5511xx.com/article/cddppdg.html