C# 執行kafka 啓動腳本,用於kafka在windows環境下自啓動 及 kafka 名詞解釋

十年河東,十年河西,莫欺少年窮windows

學無止境,精益求精服務器

windows環境下配置部署kafka服務完成後,怎樣作到kafka自動啓動?我是經過bat文件來實現的。ide

個人文件路徑:優化

關於windows環境下如何部署kafka消息中間件,請參考鄙人博客:windows 10 環境下配置kafka,及我所遇到的坑 orm

啓動kafka以前,要先啓動依賴項ZooKeeper服務,所以,咱們再D:\tool\batl文件夾下創建名爲:startKafka.bat的文件,其內容以下:server

cd D:\tool\kafka\kafka_2.12-2.7.0
D:
bin\windows\zookeeper-server-start.bat config\zookeeper.properties

 啥意思呢?中間件

切換到目錄:D:\tool\kafka\kafka_2.12-2.7.0 下,執行子文件夾bin/windows 中的 zookeeper-server-start.bat 及 config文件夾下的 zookeeper.properties ,用於啓動Zookeeper服務。對象

這些文件均在kafka部署目錄下,若有疑問,可參考鄙人博客:windows 10 環境下配置kafka,及我所遇到的坑 blog

其次在新建一個名爲:startKafka.bat 的文件,其內容以下:隊列

cd D:\tool\kafka\kafka_2.12-2.7.0
D:
bin\windows\kafka-server-start.bat config\server.properties

 啥意思呢?

和上述同樣,沒必要解釋了。

有了這兩個文件,咱們就能夠經過C# 服務的方式來執行這兩個Bat文件了,這樣作的好處是:即時服務器重啓,也能作到kafka自啓動。

C#程序以下【我寫的控制檯程序,修改成windows 服務程序便可】

    class Program
    {
        static void Main(string[] args)
        {
            //首先啓動ZooKeeper
            Task.Run(delegate { StartProcess(@"D:\tool\bat\", "startZooKeeper.bat"); });
            //30秒的時間  ZooKeeper 啓動完成  若是30秒都不能啓動完成,要麼出問題了,要麼您該換服務器了
            Thread.Sleep(30000);
            //啓動kafka
            Task.Run(delegate { StartProcess(@"D:\tool\bat\", "startKafka.bat"); });
            Console.Read();
        }

        private static void StartProcess(string path ,string fileName)
        {
            Process proc = new Process();
            string targetDir = string.Format(path);

            proc.StartInfo.WorkingDirectory = targetDir;
            proc.StartInfo.FileName = fileName;
            proc.StartInfo.Arguments = string.Format("10");

            proc.Start();
            proc.WaitForExit();
        }
    }

這樣,就能夠作到服務器重啓時,kafka服務也會重啓。

一.名詞解釋

 1.broker

Kafka單個節點稱爲broker,一個Kafka服務就是一個broker,多個broker能夠組成一個Kafka集羣.

 2.topic (主題)

 topic至關於傳統消息系統MQ中的一個隊列queue,producer端發送的message必須指定是發送到哪一個topic上.在一個大型的應用系統中,
能夠根據功能的不一樣,區分不一樣的topic(訂單的topic,登陸的topic,金額的topic等等)

 3. partition(分區)

一個topic下面能夠有多個partition,kafka在接收到message後,會將這個message進行load blance根據(hash(message)%[broker_num])均勻的將這個message分配在不一樣的partition上。
partition的配置個數通常與kafka的集羣數保持一致便可(即broker的數量)

   4.partition replica (分區副本)

partition replica 是partition 的副本數據,是爲了防止數據丟失的一種優化,partition 不會和 replica 在同一臺broker上。
Replica 的數量與partition數量保持一致便可作到高可用

  5. Segment(片段)

partition 在物理結構上能夠分爲多個segment,每一個segment 上存放着message信息

  6.producer

生產message,發送到topic上

  7.consumer

訂閱指定的topic,消費topic上面的message信息

  8.Consumer group

多個consumer 能夠組成一個consumer group

二.名詞的做用解釋

   1.partition 

kafka的message是1個key-value對的形式,或者只有topic 和value.當沒有key的時候默認是null.大多數狀況下都會分配1個key,這個key有2方面信息:

  1.元數據信息

  2.幫助partition分區,把這個key當成了路由,同一批數據寫進一個partition上

一個message 就是一個producer record(生產記錄)對象,必須包含的有topic和value這2個參數,partition和key是能夠不存在的

全部的message是同一個key,將會被分配到同一個partition上

當一個key爲null的時候,它將會使用默認的partition,這個partition的做用是它會隨機的把這個key所對應的producer record 放到其中的1個prtition中 儘可能的使topic上的數據分佈均勻,以防止數據傾斜

若是顯示的指定了一個key,那麼這個partition它會根據這個key的hash值,再根據partition的數量取模,決定message存放到topic上的哪一個partition中

:當存入的message有key 和無key 時數據發送到partition的位置如何?

   當存入的message有key存在時,message會被隨機發往不一樣的分區上。

   當存入的message沒有key值時,message會被髮往同一個分區上。

 

結論:  當一個key或者一批key映射同一partition時,全部的partition都要計算映射關係,不必定指的是可用的partition,由於在多個partition中,當某個partition掛掉時,也要參加到計算中,這就意味着,當你寫數據時,若是是發送到了這個掛掉的partition上時,會發送失敗
在一個conusmer group裏面只有一個consumer client 讀其中的一個partition,不可能存在多個group裏面多個consumer讀同一個partition 
相關文章
相關標籤/搜索