自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在 .NET 中使用 Kafka

開(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ā)布訂閱模式的程序。

[[386220]]

本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)讀書」,作者 碼農(nóng)讀書。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)讀書公眾號(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 編寫的,它擁有豐富的 路由機(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<Message> { 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

 

責(zé)任編輯:武曉燕 來(lái)源: 碼農(nóng)讀書
相關(guān)推薦

2021-03-17 09:45:31

LazyCacheWindows

2021-02-02 16:19:08

Serilog日志框架

2021-02-06 21:40:13

SignalR通訊TypeScript

2022-12-08 08:00:00

.NET?7BitArray數(shù)據(jù)執(zhí)行

2021-02-07 17:29:04

監(jiān)視文件接口

2009-01-19 09:14:31

.NETMySQLMySql驅(qū)動(dòng)包

2021-01-31 22:56:50

FromServiceASP

2021-02-03 13:35:25

ASPweb程序

2021-03-03 22:37:16

MediatR中介者模式

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache緩存框架

2021-01-28 22:39:35

LoggerMessa開(kāi)源框架

2021-01-07 07:39:07

工具接口 Swagger

2020-01-15 09:00:00

物聯(lián)網(wǎng)邊緣計(jì)算Kafka

2009-02-05 14:02:46

SmtpMail發(fā)送郵件ASP.NET

2011-08-10 09:31:41

Hibernateunion

2015-08-27 09:46:09

swiftAFNetworkin

2021-06-09 09:36:18

DjangoElasticSearLinux

2022-05-17 08:25:10

TypeScript接口前端

2022-06-23 08:00:53

PythonDateTime模塊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)