基于Linux的Kafka部署教程

     本篇主要讲Linux下的Kafka环境搭建步骤,不是基于docker容器安装,搭建测试的环境包括CentOS7.7、Unbuntu18.08,其中有涉及引用其他博客网上资料,若有不妥之处,请私信处理。

       首先 简要介绍一下Kafka:一种高吞吐量的分布式发布订阅消息系统,java开发的mq中间件,通过磁盘I0进行消息的持久化,每秒可以支持百万级的消息吞吐量,支持集群拓展、使用主从节点协调机制具有高容错性。其使用场景如:运行服务产生的日志、网站浏览监控分析、运营监控数据指标,大数据的流处理平台构建等。  

       Kafka的角色包括broker、toptic、partition、offset、producer、consumer、consumer group:broker表示一个运行Kafka的服务器节点;toptic是表示消息的种类的逻辑概念;partition是消息存储的物理概念,一个partition对应磁盘上的一个log文件,一个toptic分成多个partition存储分区,分布在多个broker上;producer是消息的生产者,可指定发布的topic和parition;offset是长整型,唯一标识每一条消息追加存储到partition的log文件的偏移量;consumer是消费者,对生产者产生的消息进行消费,consumer group是消费者组,每一个consumer都隶属于一个consumer,如果不指定则为默认,消息会发送给每个consumer group(消息广播),但是同一个consumer group内部的consumers只能基于负载均衡消费消息,每个consumer消费的消息不重复(消息单播)。如下为详细的架构图示:


         切入正题,Kafka的环境部署,由于Kafka是基于java语言开发的,因此需要JDK支持,同时依赖zookeeper注册进行节点管理,此外还有Kafka的下载,下面为下载链接:

         JDK:Java SE Development Kit 8 - Downloads

         zookeeper:zookeeper

         kafka:kafka

         安装流程是JDK->zookeeper->kafka,关于JDK的安装配置这里就不多说明了,网上资料搜索对于涉及过java的来说是比较简单的,接下来说说zookeeper和kafka:

       对于zookeeper:

       1.下载安装包之后使用linux的解压tar命令解压,如tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz;

       2.解压之后cd进入目录  cd apache-zookeeper-3.5.5-bin/config;

       3.重命名zoo_sample.cfg文件:mv zoo_sample.cfg zoo.cfg;

       对于kafka:

        1.解压:tar -xzf kafka_2.12-2.3.0.tgz;

        2.进入kafka目录:cd kafka_2.12-2.3.0/

       完成以上流程只是进行下面的安装包进行解压和文件命名而已,后续配置,基于不同的模式需要进行不同的配置,对于解压后的zookeeper和kafka,配置中涉及两个修改项的目录,zookeeper解压后的子目录bin和conf,bin存放启动的程序,conf目录下的zoo.cfg存放配置参数,同理,kafka解压后的子目录bin也是存成启动程序,config文件夹下的server.properties存放配置参数,部署模式分成根据节点的个数分为集群和单机两种,根据通讯网络分为内网和外网,如下:

(一)集群部署

      以三个节点为例,则需要部署三个zookeeper和kafka在三个不同的机器上运行,每一个节点如下:

       1.zoo.cfg存放参数配置信息,编辑zookeeper的conf目录下的zoo.cfg文件夹:vi zoo.cfg,可修改或者新增如下参数:

       initLimit=10 #集群中leader服务器与follower服务器第一次连接最多次数(可修改)

       syncLimit=5  # leader 与 follower 之间发送和应答时间,如果该follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被视为不可用。(可修改)

        dataDir=/usr/local/zookeeper-3.4.6/data #自定义的zookeeper保存数据的目录(可修改)

        clientPort=2181 #客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求,(可修改)

        server.1=192.168.200.14:2888:38888#服务器编号=服务器IP:LF数据同步端口:LF选举端口(新增)

        server.2=192.168.200.10:2888:3888(新增)

         server.3=192.168.200.11:2888:3888(新增)

      # 其中server配置对于集群中对应多少个节点就配置多少个,IP填写对应的服务器IP,两个端口一般为以上默认端口

        2.配置zookeeper集群节点的ID:在每一个节点的zookeeper下的conf目录的同一级目录新建一个data文件夹,新建一个myid文件,写入节点的ID编号,如 执行 echo“1”>>/usr/local/apache-zookeeper-3.5.5-bin/data/myid ,表示将1写入zookeeper下的data目录下的myid文件,注意此ID不能重复,而且需要与上一点中的server编号进行一一对应,每一个节点都需创建此文件,写入该节点的ID编号;

        3.修改每个节点的kafka解压目录下的config目录下的server.properties文件,修改或新增如下:

          broker.id=1 # 指定节点的ID号,不同节点ID必须不同,同时与zookeeper中国的myid文件中的ID对应

          listeners=PLAINTEXT://192.168.200.14:9092 # 监听的ip和端口

          zookeeper.connect=192.168.200.14:2181,192.168.200.10:2181,192.168.200.11:2181 #对于集群每个节点的和端口的集合描述符。

(二)单机部署

      1.修改单机的kafka解压目录下的config目录下的server.properties文件,修改或新增如下:

           listeners=PLAINTEXT://192.168.200.14:9092 # 监听的ip和端口 

          zookeeper.connect=192.168.200.14:2181 #对于单机IP和端口的描述符。

(三)内网通讯

          对于生产和消费连接kafka在本机运行通讯,只需要确认kafka解压目录下的config目录下的server.properties文件中:  listeners=PLAINTEXT://192.168.200.14:9092 # 监听的ip和端口 ,此ip配置为该节点机器的本地ip,比如locahost表示本机,

         如果生产和消费者连接kafka是在内网运行通讯,则该ip修改为主机名(可自定义,比如kafkahost),配置为listeners=PLAINTEXT://kafkahost:9092,然后编辑/etc/hosts文件,新增 比如:192.168.200.14 kafkahost  ,建立内网IP和主机名的映射关系。

(四)外网通讯

         对于生产者和消费者连接kafka在外网通讯,如果该节点机器已配置外网IP,则在kafka解压目录下的config目录下的server.properties文件中修改listeners配置,新增advertised.listeners设置,如下:

        #当告诉服务器监听了 0.0.0.0,意味着监听每一个可用的网络接口 

       listeners=PLAINTEXT://0.0.0.0:9092 

       #该配置是提供给消费者和生产者的,如果没有配置,则默认将listeners的值给消费者和生产者 ,此IP为外网IP

        advertised.listeners=PLAINTEXT://59.69.101.206:9092

          对于生产者连接kafka所在的节点的机器为内网IP,需要通过IP和端口映射才能访问到的,推荐使用主机名替换listeners中的IP,如:

         listeners=PLAINTEXT://hostname:9092 

         advertised.listeners=PLAINTEXT://hostname:9092

命令生产和消费时也用主机名代替真实IP,不过是客户端机器的/etc/hosts配置hostname映射成内网IP,外网客户端配成映射外网IP。

(五)服务启动

开启zookeeper命令(备注:先进入zookeeper的bin目录)

./zkServer.sh start

关闭zookeeper命令(备注:先进入zookeeper的bin目录)

./zkServer.sh stop

查看zookeeper的启动状态(备注:先进入zookeeper的bin目录)

./zkServer.sh status

Kafka启动命令(备注:先进入kafka目录)

常规模式启动kafka

bin/kafka-server-start.sh config/server.properties

进程守护模式启动kafka

nohup bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 &

Kafka关闭命令(备注:先进入kafka目录)

bin/kafka-server-stop.sh

启动成功可查看kafka进程

ps -ef|grep kafka

(六)测试

  1.zookeeper测试:

        对于单节点使用上述查询zookeeper状态便可以,对于多节点的zookeeper测试,比如zookeeper解压在/usr/local/目录下:

       在任意节点上执行如下,创建topic为test1,发送hello成功,注意IP为该节点机器的IP和端口:

        /usr/local/apache-zookeeper-3.5.5-bin/bin/zkCli.sh -server 192.168.200.10:2181 create /test1 "hello"

        在其他节点上获取topic为test1的消息,输入如下命令显示收到hello,注意IP为该节点机器的IP和端口:

         /usr/local/apache-zookeeper-3.5.5-bin/bin/zkCli.sh -server 192.168.200.11:2181 

    2.kafka测试:

      创建话题"test":

      bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

  列出话题列表,可以查看创建的话题:

     bin/kafka-topics.sh --list --bootstrap-server localhost:9092

    发送信息:

     bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

     启动消费者,可以看到收到了刚才生产者发送的消息:

     bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

     以上命令是用连接的kafka为本机单节点为例,命令参数为locahost:9092,如果为集群也可以改为如下某个 集群配置192.168.200.14:2181,192.168.200.10:2181,192.168.200.11:2181 。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容