本文档仅适用于kafka_2.11-1.1.1版本和zookeeper-3.4.9版本的服务集群,不适用其他版本的安装。
本文档搭建的Kafka集群结构为3个zookeeper + 2个controller + n个broker。
所涉及zookeeper软件包均在链接: https://pan.baidu.com/s/1930nqCqKNadHRECT6VYvFg?pwd=2zv5 提取码: 2zv5 下,部署前请确认具体版本及环境。
所涉及jdk软件包均在链接: https://pan.baidu.com/s/1OEcP9Tq8ekYBJsZjVSIiUQ?pwd=dbwx 提取码: dbwx 下,部署前请确认具体版本及环境。
所涉及kafka软件包均在链接: 链接: https://pan.baidu.com/s/1X9CsCqLoA-w2tjo2z-jZ-Q?pwd=eebi 提取码: eebi 下,部署前请确认具体版本及环境。
搭建手册中所需安装包md5值如下:
| 软件 | 软件版本 | MD5值 |
| :-------: | :------------------: | :------------------------------: |
| zookeeper | zookeeper-3.4.9.tgz | 85e8a2b285a5aa10865e81272b5e276b |
| kafka | kafka_2.11-1.1.1.tgz | 2733dea0d32ac8b256bc5bc75b3c8baa |
| java | jdk1.8.0_161.tgz | 99051574a0d90871ed24a91a5d321ed2 |
以下os参数经基础平台测试,确认适用于RedHat 6.3与CentOS 7.3。
修改/etc/security/limits.d/90-nproc.conf
echo '* - nproc 500000' > /etc/security/limits.d/90-nproc.conf
echo '* - nofile 500000' >> /etc/security/limits.d/90-nproc.conf
修改/etc/sysctl.conf
grep 'vm.max_map_count' /etc/sysctl.conf | grep -v '#'
if [ $? -ne 0 ];then
echo 'vm.max_map_count = 262144' >> /etc/sysctl.conf
fi
sysctl -p
修改系统保留内存与swappiness阈值,修改/etc/sysctl.conf
grep 'vm.swappiness' /etc/sysctl.conf | grep -v '#'
if [ $? -ne 0 ];then
echo 'vm.swappiness = 0' >> /etc/sysctl.conf
fi
grep 'vm.min_free_kbytes' /etc/sysctl.conf | grep -v '#'
if [ $? -ne 0 ];then
echo 'vm.min_free_kbytes = 5120000' >> /etc/sysctl.conf
fi
sysctl -p
物理机独占参数(虚拟机则忽略)
cat /proc/net/bonding/bond0|grep "Bonding Mode"
确认网卡配置是否为:
yum -y -q install gcc python perl php make smartmontools iotop net-snmp ifstat expect nc nmon psmisc dstat ftp unzip rsync
kafka集群的ZK默认3台机器。如果架构搭建5台,则此文档中后续涉及到的部分扩展至5台即可。如果是物理机,则要求磁盘全做raid1。
/home需大于50G(各环境);单独挂载/zkdata和/zkdatalog,空间大小根据业务需求调整,生产要求不小于100G。
df -h|grep -E 'home|zkdata|zkdatalog'
/dev/mapper/datavg-zkdatalv 99G 206M 94G 1% /zkdata
/dev/mapper/datavg-zkdataloglv 99G 282M 94G 1% /zkdatalog
/dev/mapper/datavg-homelv 99G 206M 94G 1% /home
groupadd zookeeper -g 800 && useradd -g zookeeper -u 800 zookeeper
mkdir -p /zkdata/data
mkdir -p /zkdatalog/datalog
chown -R zookeeper:zookeeper /zkdata/data
chown -R zookeeper:zookeeper /zkdatalog/datalog
su - zookeeper -c 'cd && mkdir software'
cd /home/zookeeper/software
tar -zxf jdk1.8.0_161.tgz
tar -zxf zookeeper-3.4.9.tgz
ln -s jdk1.8.0_161 java
ln -s zookeeper-3.4.9 zookeeper
rm jdk1.8.0_161.tgz zookeeper-3.4.9.tgz
chown -R zookeeper:zookeeper /home/zookeeper
在zookeeper用户下的/home/zookeeper/.bashrc文件中,添加ZK环境变量,最终文件内容如下。
cd /home/zookeeper
echo 'export JAVA_HOME=/home/zookeeper/software/java' >> .bashrc
echo 'export ZOOKEEPER_HOME=/home/zookeeper/software/zookeeper' >> .bashrc
echo 'export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/tools:$PATH' >> .bashrc
检查zoo.cfg配置文件(如果内容一致就继续操作)
cd /home/zookeeper/software/zookeeper/conf;cat zoo.cfg|grep -v "#"|sed '/^$/d'
tickTime=2000
initLimit=20
syncLimit=10
maxSessionTimeout=60000
dataDir=/zkdata/data
dataLogDir=/zkdatalog/datalog
clientPort=2181
autopurge.snapRetainCount=6
autopurge.purgeInterval=1
server.1=:2888:3888
server.2=:2888:3888
server.3=:2888:3888
修改zoo.cfg配置文件,此处只改 “” 的内容,修改方式如下:
**<host>**为zookeeper各个节点的域名,默认是3台zookeeper。如与zookeeper节点有增加,按照文件格式新增即可。
修改后(修改内容)样例展示:
server.1=zk01.cola.com:2888:3888
server.2=zk02.cola.com:2888:3888
server.3=zk03.cola.com:2888:3888
sever.1
ssh zk01.cola.com
su - zookeeper 'echo 1 > /zkdata/data/myid'
cat /zkdata/data/myid
1
sever.2
ssh zk02.cola.com
su - zookeeper 'echo 2 > /zkdata/data/myid'
cat /zkdata/data/myid
2
sever.3
ssh zk03.cola.com
su - zookeeper 'echo 3 > /zkdata/data/myid'
cat /zkdata/data/myid
3
Kafka默认使用物理机搭建,要求机器系统盘使用raid1,数据盘使用raid10。
/home需大于50G(各环境),单独挂载/kafkalog,空间大小根据业务需求,生产默认16T。
df -h|grep -E 'home|kafkalog'
/dev/mapper/datavg-homelv 99G 206M 94G 1% /home
/dev/mapper/datavg-kafkaloglv 16T 557G 15T 4% /kafkalog
groupadd kafka -g 850 && useradd -g kafka -850 kafka
mkdir -p /kafkalog/logs
chown -R kafka:kafka /kafkalog/logs
su - kafka -c 'cd && mkdir {logs,software}'
cd /home/kafka/software
tar -zxf jdk1.8.0_161.tgz
tar -xf kafka_2.11-1.1.1.tgz
ln -s jdk1.8.0_161 java
ln -s kafka_2.11-1.1.1 kafka
rm jdk1.8.0_161.tgz kafka_2.11-1.1.1.tgz
chown -R kafka:kafka /home/kafka
修改/home/kafka/.bashrc文件,添加环境变量。
cd /home/kafka
echo 'export JAVA_HOME=/home/kafka/software/java' >> .bashrc
echo 'export KAFKA_HOME=/home/kafka/software/kafka' >> .bashrc
echo 'export PATH=$JAVA_HOME/bin:$KAFKA_HOME/bin:$PATH' >> .bashrc
kafka集群搭建,整个集群划分为2个controller节点,和n个broker节点。接下来就按照角色controller和broker修改/home/kafka/software/kafka/config/server.properties文件。
注:只有下文标注有注释的配置项才需要修改。其他配置项原则上使用默认值。
查看本机CPU核数命令:
grep 'physical id' /proc/cpuinfo |wc -l
broker.id=999 修改为998,或999。此为controller固定ID。
listeners=PLAINTEXT://your.host.name:9092 使用本机IP,9092端口可指定。
advertised.listeners=PLAINTEXT://your.host.name:9092 使用本机IP,9092端口可指定。
num.network.threads=3 修改为本机cpu核数。
num.io.threads=8 修改为本机cpu核数的2倍。
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/kafkalog/logs/kafka-logs
num.partitions=2
num.recovery.threads.per.data.dir=2 修改为本机cpu核数的一半。
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
log.retention.hours=12
log.segment.bytes=268435456
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181 修改为Zookeeper域名,2181端口可指定。
zookeeper.connection.timeout.ms=18000
zookeeper.session.timeout.ms=18000
group.initial.rebalance.delay.ms=3000
auto.create.topics.enable=false
message.max.bytes=10485760
replica.fetch.max.bytes=10485760
num.replica.fetchers=2
max.connections.per.ip=3000
offsets.retention.minutes=10080
controller.elect.enable=true controller角色这里改为true。
unclean.leader.election.enable=true
inter.broker.protocol.version=1.1 1.1.1.x版本这里修改为1.1
log.message.format.version=0.8.2
smart.delay.fetch.enable=true
smart.IO.Busy.Threshold=0.9
smart.lag.Threshold=100000
smart.disk.name=vda
smart.delay.interval=100
broker.id=0 修改为业务指定ID,一般从0开始,依次增加。
listeners=PLAINTEXT://your.host.name:9092 使用本机IP,9092端口可指定。
advertised.listeners=PLAINTEXT://your.host.name:9092 使用本机IP,9092端口可指定。
num.network.threads=3 修改为本机cpu核数。
num.io.threads=8 修改为本机cpu核数的2倍。
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/kafkalog/logs/kafka-logs
num.partitions=2
num.recovery.threads.per.data.dir=2 修改为本机cpu核数的一半。
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
log.retention.hours=12
log.segment.bytes=268435456
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181 修改为Zookeeper域名,2181端口可指定。
zookeeper.connection.timeout.ms=18000
zookeeper.session.timeout.ms=18000
group.initial.rebalance.delay.ms=3000
auto.create.topics.enable=false
message.max.bytes=10485760
replica.fetch.max.bytes=10485760
num.replica.fetchers=2
max.connections.per.ip=3000
offsets.retention.minutes=10080
controller.elect.enable=false broker角色这里为false,默认不需修改。
unclean.leader.election.enable=true
inter.broker.protocol.version=1.1 1.1.1.x版本这里修改为1.1
log.message.format.version=0.8.2
smart.delay.fetch.enable=true
smart.IO.Busy.Threshold=0.9
smart.lag.Threshold=100000
smart.disk.name=vda
smart.delay.interval=100
(1)登录zookeeper节点,登入zookeeper用户,启动zk服务。
su - zookeeper
zkServer.sh start
(2)三台zookeeper节点启动完毕以后,确认zk服务状态,确保有且仅有一台结果为leader。
zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/software/zookeeper/bin/…/conf/zoo.cfg
Mode: leader
(1)登录controller节点,登入kafka用户,启动controller节点kafka服务。
su - kafka
start-kafka.sh
检查server.log文件,查看是否出现以下关键信息。
cd /home/kafka/logs;cat server.log|grep started
INFO [Kafka Server ], started (kafka.server.KafkaServer)
(2)登录broker节点,登入kafka用户,启动broker节点kafka服务。
su - kafka
start-kafka.sh
检查server.log文件,查看是否出现以下关键信息。
cd /home/kafka/logs;cat server.log|grep started
INFO [Kafka Server ], started (kafka.server.KafkaServer)
因篇幅问题不能全部显示,请点此查看更多更全内容