zoukankan      html  css  js  c++  java
  • C# 执行kafka 启动脚本,用于kafka在windows环境下自启动 及 kafka 名词解释

    十年河东,十年河西,莫欺少年穷

    学无止境,精益求精

    windows环境下配置部署kafka服务完成后,怎样做到kafka自动启动?我是通过bat文件来实现的。

    我的文件路径:

    关于windows环境下如何部署kafka消息中间件,请参考鄙人博客:windows 10 环境下配置kafka,及我所遇到的坑 

    启动kafka之前,要先启动依赖项ZooKeeper服务,因此,我们再D: oolatl文件夹下建立名为:startKafka.bat的文件,其内容如下:

    cd D:	oolkafkakafka_2.12-2.7.0
    D:
    binwindowszookeeper-server-start.bat configzookeeper.properties

     啥意思呢?

    切换到目录:D: oolkafkakafka_2.12-2.7.0 下,执行子文件夹bin/windows 中的 zookeeper-server-start.bat 及 config文件夹下的 zookeeper.properties ,用于启动Zookeeper服务。

    这些文件均在kafka部署目录下,如有疑问,可参考鄙人博客:windows 10 环境下配置kafka,及我所遇到的坑 

    其次在新建一个名为:startKafka.bat 的文件,其内容如下:

    cd D:	oolkafkakafka_2.12-2.7.0
    D:
    binwindowskafka-server-start.bat configserver.properties

     啥意思呢?

    和上述一样,不必解释了。

    有了这两个文件,我们就可以通过C# 服务的方式来执行这两个Bat文件了,这样做的好处是:即时服务器重启,也能做到kafka自启动。

    C#程序如下【我写的控制台程序,修改为windows 服务程序即可】

        class Program
        {
            static void Main(string[] args)
            {
                //首先启动ZooKeeper
                Task.Run(delegate { StartProcess(@"D:	oolat", "startZooKeeper.bat"); });
                //30秒的时间  ZooKeeper 启动完成  如果30秒都不能启动完成,要么出问题了,要么您该换服务器了
                Thread.Sleep(30000);
                //启动kafka
                Task.Run(delegate { StartProcess(@"D:	oolat", "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

    @天才卧龙的博客

  • 相关阅读:
    SharePoint 2013 中的SQL Server 安全
    SharePoint 2013 的HTML5特性之响应式布局
    SharePoint 2013 一些小技巧
    SharePoint 2013 排错之"Code blocks are not allowed in this file"
    SharePoint 2013 创建搜索中心及搜索设置
    SharePoint 2013 使用PowerShell创建State Service
    SharePoint 2013 内容部署功能简介
    SharePoint 使用PowerShell恢复误删的网站集
    SharePoint 自定义WebPart之间的连接
    linux之misc及使用misc创建字符设备
  • 原文地址:https://www.cnblogs.com/chenwolong/p/kafkaservice.html
Copyright © 2011-2022 走看看