阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Kafka+Zookeeper集群搭建详解

466次阅读
没有评论

共计 8540 个字符,预计需要花费 22 分钟才能阅读完成。

ElasticSearch 集群搭建的方法见这里 http://www.linuxidc.com/Linux/2017-12/149964.htm,希望能帮助大家,这儿我再接着介绍 kafka 集群,接着上次搭建的效果。

首先我们来简单了解下什么是 kafka 和 zookeeper?

Apache kafka 是一个分布式的基于 push-subscribe 的消息系统,它具备快速、可扩展、可持久化的特点。它现在是 Apache 旗下的一个开源系统,作为 Hadoop 生态系统的一部分,被各种商业公司广泛应用。它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 hadoop 的批处理系统、低延迟的实时系统、storm/spark 流式处理引擎。

特点:

  • 高吞吐量、低延迟:kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒
  • 可扩展性:kafka 集群支持热扩展
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 容错性:允许集群中节点失败(若副本数量为 n, 则允许 n - 1 个节点失败)
  • 高并发:支持数千个客户端同时读写

ZooKeeper 是一个分布式的,开 放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

集群角色:

  • Leader 服务器是整个 zookeeper 集群工作机制中的核心
  • Follower 服务器是 zookeeper 集群状态的跟随者
  • Observer 服务器充当一个观察者的角色

接下来就直接进去正题,如何正确的搭建 kafka 和 zookeeper 集群。

 一、zookeeper 集群配置

1、修改主机名

kafka1.example.com --> 172.16.81.131
kafka2.example.com --> 172.16.81.132

2、修改 hosts 文件

[root@kafka1 opt]# cat /etc/hosts
127.0.0.1  kafka1.example.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@kafka2 opt]# cat /etc/hosts
127.0.0.1  kafka2.example.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6

3、安装 jdk

cd /opt
jdk-8u131-linux-x64.tar.gz
tar -zxvf jdk-8u131-linux-x64.tar.gz
mv jdk-1.8.0_131 /usr/local/

4、配置 jdk 环境变量

[root@kafka1 opt]# tail -10 /etc/profile
 #JAVA 环境变量
 export JAVA_HOME=/usr/local/jdk1.8.0_131
 export JAVA_BIN=$JAVA_HOME/bin
 export JAVA_LIB=$JAVA_HOME/lib
 export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
 export PATH=$JAVA_BIN:$PATH
 export _JAVA_SR_SIGNUM=12
 #zookeeper 环境变量
 export ZOOKEEPER_HOME=/opt/zookeeper/
 export PATH=$ZOOKEEPER_HOME/bin:$PATH
 export PATH
[root@kafka2 opt]# tail -10 /etc/profile
 #JAVA 环境变量
 export JAVA_HOME=/usr/local/jdk1.8.0_131
 export JAVA_BIN=$JAVA_HOME/bin
 export JAVA_LIB=$JAVA_HOME/lib
 export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
 export PATH=$JAVA_BIN:$PATH
 export _JAVA_SR_SIGNUM=12
 #zookeeper 环境变量
 export ZOOKEEPER_HOME=/opt/zookeeper/
 export PATH=$ZOOKEEPER_HOME/bin:$PATH
 export PATH
 # 应用环境变量
 source /etc/profile

5、下载软件包

zookeeper-3.4.10.tar.gz

#解压
tar -zxvf zookeeper-3.4.10.tar.gz
mv zookeeper-3.4.10 zookeeper
cd /opt/zookeeper/config/
cp zoo_sample.cfg zoo.cfg

6、编辑 zookeeper 配置文件

[root@kafka1 opt]# cat /opt/zookeeper/conf/zoo.cfg | grep -v '^#' | grep -v '^$'
 tickTime=2000
 initLimit=20
 syncLimit=10
 dataDir=/opt/data/zookeeper/data
 datalogDir=/opt/data/zookeeper/logs
 clientPort=2181
 server.1=172.16.81.131:2888:3888 
 server.2=172.16.81.132:2888:3888
[root@kafka2 opt]# cat /opt/zookeeper/conf/zoo.cfg | grep -v '^#' | grep -v '^$'
 tickTime=2000
 initLimit=20
 syncLimit=10
 dataDir=/opt/data/zookeeper/data
 datalogDir=/opt/data/zookeeper/logs
 clientPort=2181
 server.1=172.16.81.131:2888:3888
 server.2=172.16.81.132:2888:3888

# 注意:在 zookeeper 配置文件中或者后面不能跟注释文字,不然会报错!
# 说明:
tickTime: 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
2888 端口:表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
3888 端口:表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口

7、分别在 kafka1 和 kafka2 服务器上创建 datadir 目录

mkdir -p /opt/kafka/data
mkdir -p /opt/kafka/data/zookeeper

8、分别写入 id

[root@kafka1 opt]# echo "1" > /opt/kafka/data/zookeeper/myid
[root@kafka2 ~]# echo "2" > /opt/kafka/data/zookeeper/myid
# 注意 ID 不能一样

9、启动 zookeeper 集群

cd /opt/zookeeper/
bin/zkServer.sh start

10、启动效果

[rootkafka1 ~]#  netstat -nlpt | grep -E "2181|2888|3888"
    tcp        0      0 :::2181                    :::*                        LISTEN      33644/java
    tcp        0      0 ::ffff:10.1.1.247:3888      :::*                        LISTEN      33644/java
[root@kafka2 ~]#  netstat -nlpt | grep -E "2181|2888|3888"
    tcp        0      0 :::2181                    :::*                        LISTEN      35016/java
    tcp        0      0 ::ffff:10.1.1.248:2888      :::*                        LISTEN      35016/java #哪台是 leader,那么他就拥有 2888 端口
    tcp        0      0 ::ffff:10.1.1.248:3888      :::*                        LISTEN      35016/java 

二、kafka 集群搭建

 1、配置文件

[root@kafka1 opt]# cat /opt/kafka/config/server.properties | grep -v '^#'|grep -v '^$'
    broker.id=1
    listeners=PLAINTEXT://172.16.81.131:9092
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    log.dirs=/opt/kafka/data/kafka-logs
    num.partitions=10
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    log.retention.hours=168
    log.segment.bytes=1073741824
    log.retention.check.interval.ms=300000
    zookeeper.connect=172.16.81.131:2181,172.16.81.132:2181
    zookeeper.connection.timeout.ms=6000
    group.initial.rebalance.delay.ms=0
[root@kafka2 ~]# cat /opt/kafka/config/server.properties | grep -v '^#'|grep -v '^$'
    broker.id=2
    listeners=PLAINTEXT://172.16.81.132:9092
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    log.dirs=/opt/kafka/data/kafka-logs
    num.partitions=10
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    log.retention.hours=168
    log.segment.bytes=1073741824
    log.retention.check.interval.ms=300000
    zookeeper.connect=172.16.81.131:2181,172.16.81.132:2181
    zookeeper.connection.timeout.ms=6000
    group.initial.rebalance.delay.ms=0
    # 注意:broker.id 不能相同

2、启动 kafka 集群

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

3、启动效果

[root@kafka1 opt]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address          Foreign Address        State      PID/Program name         
    tcp6      0      0 :::47457                :::*                    LISTEN      6582/java         
    tcp6      0      0 172.16.81.131:9092      :::*                    LISTEN      9260/java         
    tcp6      0      0 :::2181                :::*                    LISTEN      6582/java         
    tcp6      0      0 :::33230                :::*                    LISTEN      9260/java         
    tcp6      0      0 172.16.81.131:3888      :::*                    LISTEN      6582/java         
[root@kafka2 ~]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address          Foreign Address        State      PID/Program name         
    tcp6      0      0 172.16.81.132:9092      :::*                    LISTEN      9395/java         
    tcp6      0      0 :::42884                :::*                    LISTEN      6779/java         
    tcp6      0      0 :::2181                :::*                    LISTEN      6779/java         
    tcp6      0      0 172.16.81.132:2888      :::*                    LISTEN      6779/java         
    tcp6      0      0 172.16.81.132:3888      :::*                    LISTEN      6779/java               
    tcp6      0      0 :::38557                :::*                    LISTEN      9395/java

4、测试 zookeeper 和 kafka 是否正常

(1)建立一个主题
[root@kafka2 ~]# /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic summer
    Created topic "summer".
    # 注意:factor 大小不能超过 broker 数, 否则报错,当前集群 broker 值值为 2
(2)查看有哪些主题已经创建
[root@kafka2 ~]# /opt/kafka/bin/kafka-topics.sh --list --zookeeper 172.16.81.132:2181
    summer
[root@kafka1 ~]# /opt/kafka/bin/kafka-topics.sh --list --zookeeper 172.16.81.131:2181
    summer
(3)查看 topic 的详情
[root@kafka2 ~]# /opt/kafka/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic summer
    Topic:summer    PartitionCount:1    ReplicationFactor:2 Configs:
    Topic: summer  Partition: 0    Leader: 2  Replicas: 2,1  Isr: 2,1
    # 主题名称:summer
    #Partition: 只有一个,从 0 开始
    #leader:id 为 2 的 broker
    #Replicas 副本存在于 broker id 为 2,1 的上面
    #Isr: 活跃状态的 broker
(4)发送消息,这里使用的是生产者角色
[root@kafka2 ~]# /bin/bash /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092  --topic summer
    >Hello,wangyanlin
    >I am from china.
    >
    >
    >;
    >^C[root@kafka2 ~]#
(5)接收消息,这里使用的是消费者角色
[root@kafka2 ~]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic summer --from-beginning
    Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
    Hello,wangyanlin
    I am from china.
 
 
    ;
 
    ^CProcessed a total of 5 messages
[root@kafka1 kafka]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper 172.16.81.132:2181 --topic summer --from-beginning
    Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
    Hello,wangyanlin
    I am from china.
 
 
    ;
    ^CProcessed a total of 5 messages
(6)删除消费主题
    /opt/kafka/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic summer
    开启 conf 里面的 delete.topic.enable 改成 true
# 测试正常!!完成!

测试 kafka 集群能正常接收消费信息和消费信息!!

配置 logstash 日志收集和过滤,还有 kibana 图形化展示。见这里  http://www.linuxidc.com/Linux/2018-01/150320.htm

Elasticsearch 安装使用教程 http://www.linuxidc.com/Linux/2015-02/113615.htm

分布式搜索 ElasticSearch 单机与服务器环境搭建  http://www.linuxidc.com/Linux/2012-05/60787.htm

ElasticSearch 的工作机制  http://www.linuxidc.com/Linux/2014-11/109922.htm

ElasticSearch 集群搭建实例  http://www.linuxidc.com/Linux/2015-02/114243.htm

ElasticSearch 的详细介绍:请点这里
ElasticSearch 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-01/150321.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8540字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7991249
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...