如何在.net中使用Apache Kafka

Apache Kafka是一個開源、分散式、分區的、高性能的發布-訂閱消息平台。對於能夠處理大量數據的系統來說,使用Apache Kafka是一個很好的選擇。在本文中,我們將研究如何用c#語言在Kafka中創建生產者和消費者應用程序。

要開始使用Kafka,你應該先下載Kafka和ZooKeeper,然後將它們安裝到你的Windows系統上。當你完成了必要的特定的設置之後,運行ZooKeeper和Kafka,然後再返回繼續看這篇文章。

Apache Kafka架構

在本節中,我們將研究Kafka中的架構組件和相關術語。基本上,Kafka由以下組件組成:

(1)Kafka cluster—一一個或多個伺服器的集合,每一台伺服器稱為broker。

(2)生產者——用於發布消息的組件。

(3)消費者—用於檢索或消費消息的組件。

(4)ZooKeeper——一個用於在分散式環境中維護跨集群節點配置信息的集中協調服務。

Kafka的基本數據單元是消息,在Kafka中的消息被表示為鍵值對,Kafka將所有的消息轉換成數組。應該注意的是,在Kafka中,生產者、消費者和集群之間的通信使用TCP協議。Kafka集群中的每個伺服器都稱為broker。通過向集群中添加額外的伺服器,你可以水平地伸縮Kafka。

下圖展示了Kafka的架構組件——高級視圖

Kafka中的主題代表了一個消息的邏輯集合,你可以將其看作是生產者可以發布的消息所屬的類別。順便說一下,Kafkabroker包含一個或多個主題,這些主題依次被劃分為一個或多個分區,一個分區被定義為一個有序的消息序列。分區是Kafka 能夠動態伸縮的關鍵,因為分區分布在多個伺服器之間。

在任何給定的時間點,你可以用一個或多個生產者將消息推送到集群中。Kafka的生產者將消息發布為一個特定的主題,消費者通過訂閱這個主題來接收消息。

在Kafka和RabbitMQ之間進行選擇

Kafka和RabbitMQ都是流行的開源消息系統,在相當長的一段時間內都被廣泛使用。什麼時候你應該選擇Kafka而不是RabbitMQ ?這個取決於以下幾個因素。

RabbitMQ是流行的開源消息隊列系統,用Erlang語言開發。它強大的原因是豐富的路由功能和提供消息確認的能力。RabbitMQ還提供了一個用戶友好的web界面,你可以使用這個界面來監視RabbitMQ伺服器。

然而,當涉及到支持大型部署時,Kafka比RabbitMQ要好得多,因為你需要做的就是添加更多的分區。還應該注意到,RabbitMQ集群不能支持網路分區。你應當採用聯合的方法使RabbitMQ伺服器結合在一起。

Kafka在性能上也明顯超過了RabbitMQ,因為一個Kafka實例每秒可以處理100K消息,而RabbitMQ每秒可以處理近20K消息。Kafka支持離線和在線消息消費,當你想要以低延遲的狀態發送消息以支持一批消費者時,Kafka是一個不錯的選擇。

構造Kafka的生產者和Kafka的消費者

在本節中,我們將研究如何構造在Kafka中一起使用的生產者和消費者。為此,我們將在Visual Studio中構造兩個控制台應用程序——其中一個代表生產者,一個代表消費者。我們需要安裝一個適合於.net的Kafka應用程序。

順便說一下,有許多的關於Kafka的應用程序,但在這篇文章中,我們將使用Kafka - net作為Apache Kafka的本地c#客戶端,你可以在Visual Studio內通過NuGet包管理器安裝Kafka - net。

下面是構造Kafka的生產者的主要方法:

下面是構造Kafka的消費者的主要方法:

注意,你應該在生產者和消費者的應用程序中加入Kafka的命名空間,如下圖所示:

最後,先運行生產者,再運行消費者。你就可以看到「歡迎來到Kafka!」顯示在消費者控制台窗口。

雖然我們有很多的消息傳遞系統以供選擇,如:RabbitMQ、MSMQ、IBM MQ系列,但Kafka在處理大量數據流方面領先於其他系統。Kafka通常用於IoT應用程序,日誌聚合以及其他需要低延遲和強大的消息傳遞的保證的情況。

如果你的應用程序需要一個快速且可擴展的服務平台,Kafka是一個很好的選擇。


推薦閱讀:

Kafka(二)高可用系統設計心得
Kafka Connect內部原理
如何使用Kafka在生產環境構建大規模機器學習
重磅發布:Kafka迎來1.0.0版本,正式告別四位數版本號
大數據平台開發人員的核心競爭力是什麼?

TAG:Kafka | ZooKeeper | 机器学习 |