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

    @天才卧龙的博客

  • 相关阅读:
    sphinx测试数据生成
    sphinx是支持结果聚类的——WHERE、ORDER BY和GROUP BY
    sphinx是支持结果聚类的
    sphinx 针对tedfield搜索
    启明星辰泰合发布新一代日志分析系统
    php下载远程图片方法总结(curl手动解析header)curl跳转问题解决
    php抓取ajax页面返回图片。
    PHP用CURL或fsockopen伪造IP和来路(referer)
    windows无效字符名导致的错误及解决办法
    php 原生或curl获取 http headers
  • 原文地址:https://www.cnblogs.com/chenwolong/p/kafkaservice.html
Copyright © 2011-2022 走看看