基於NET Core簡單操作Kafka

安裝

windows服務器上安裝JDK,kafka以及zookeeper。

安裝JDK

JDK下載路徑
在這裏插入圖片描述
安裝完成後需要添加以下的環境變量(右鍵點擊“我的電腦” -> “高級系統設置” -> “環境變量” ):
C:\Program Files\Java\jdk-14\bin(你的安裝目錄)
打開cmd運行 “java -version” 查看當前系統Java的版本,測試是否安裝完成。
在這裏插入圖片描述

安裝zookeeper

Kafka的運行依賴於Zookeeper,所以在運行Kafka之前我們需要安裝並運行Zookeeper
下載zookeeper
主要是下載Bin文件的版本,apache-zookeeper-3.6.0-bin.tar.gz
在這裏插入圖片描述
下載完成解壓文件
打開zookeeper-3.4.13\conf,把zoo_sample.cfg重命名成zoo.cfg
從文本編輯器裏打開zoo.cfg
把dataDir的值改成“./zookeeper-3.4.13/data”
添加環境變量:
C:\Program Files\apache-zookeeper-3.6.0\bin(你的解壓到的目錄)
進入目錄C:\Program Files\apache-zookeeper-3.6.0\bin,文本編輯zkEnv.cmd,添加JAVA_HOME變量後保存退出。
set JAVA_HOME=C:\Program Files\Java\jdk-14(前面安裝JDK的目錄)
在這裏插入圖片描述
打開cmd然後執行 zkserver,掛着不要關閉。
在這裏插入圖片描述

安裝kafka

下載kafka
在這裏插入圖片描述
解壓文件,注意解壓的目錄不能含有中文和空格
進入kafka的目錄config
從文本編輯器裏打開 server.properties
把 log.dirs的值改成 “./logs”
打開cmd進入kafka文件目錄: cd C:\kafka_2.11-2.4.1(kafka目錄)
輸入並執行: .\bin\windows\kafka-server-start.bat .\config\server.properties
掛着不要關閉。
在這裏插入圖片描述

運行kafka

創建topic

cmd進入kafka目錄,執行以下代碼創建一個topic:

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

在這裏插入圖片描述

創建生產者

cmd進入kafka目錄,執行以下代碼創建一個producer

kafka-console-producer.bat --broker-list localhost:9092 --topic test

創建消費者

cmd進入kafka目錄,執行以下代碼創建一個consumer

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

最後測試如圖所示在這裏插入圖片描述

NET簡單操作kafka

新建兩個項目,一個kafka服務端用於發送消息,一個kafka客戶端用於訂閱消息
在這裏插入圖片描述
打開NuGet,搜索安裝kafka-net-core

服務端

using KafkaNet;
using KafkaNet.Model;
using KafkaNet.Protocol;
using System;

namespace KafkaServer
{
    class Program
    {
        static void Main(string[] args)
        {
            const string topicName = "test";
            var options = new KafkaOptions(new Uri("http://localhost:9092"));

            //創建一個生產者發消息
            using (var producer = new Producer(new BrokerRouter(options)){  BatchSize = 100, BatchDelayTime = TimeSpan.FromMilliseconds(2000) })
            {
                while (true)
                {
                    var message = Console.ReadLine();
                    if (message == "quit") break;

                    if (!string.IsNullOrEmpty(message))
                    {
                        producer.SendMessageAsync(topicName, new[] { new Message(message) });
                    }
                }
            }
        }
    }
}

客戶端

using KafkaNet;
using KafkaNet.Common;
using KafkaNet.Model;
using System;
using System.Threading.Tasks;

namespace KafkaClient
{
    class Program
    {
        static void Main(string[] args)
        {
            const string topicName = "test";
            var options = new KafkaOptions(new Uri("http://localhost:9092"));


            Task.Run(() =>
            {
                //創建一個消費者
                var consumer = new Consumer(new ConsumerOptions(topicName, new BrokerRouter(options)));
                foreach (var data in consumer.Consume())
                {
                    Console.WriteLine("Response: PartitionId={0},Offset={1} :Value={2}", data.Meta.PartitionId, data.Meta.Offset, data.Value.ToUtf8String());
                }
            });

            Console.ReadLine();
        }
    }
}

運行測試結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章