kafka集群依赖于zookeeper,所以需要先搭建zookeeper集群,kafka默认自带了内建的zookeeper,建议使用自己外搭建的zookeeper,这样比较灵活并且解耦服务,同时也可以让其他需要zookeeper的服务使用。注意kafka-2.11-0.11版本与zookeeper-3.4.10.tar.gz对应,
一、安装
1、下载zookeeper:
# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
生产环境使用集群至少需要三台服务器,官方建议至少3或5台,并且集群节点个数必须是奇数。需要java环境,jdk1.8+(自己先配置好,本文不涉及)。
创建目录:
#mkdir /data
#mkdir /data/zookeeper/{data,logs} -p
#tar xf zookeeper-3.4.10.tar.gz
#rm -rf zookeeper-3.4.10.tar.gz
修改配置文件:
创建配置文件zoo.cfg
#cat zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181
maxClientCnxns=100
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
quorumListenOnAllIPs=true
dataLogDir=/data/zookeeper/logs
server.3=10.10.11.92:2888:3888
server.6=10.10.9.29:2888:3888
server.9=10.10.8.16:2888:3888
创建myid,用于唯一标示一个zk节点,在创建的/data/zookeeper/data目录下面创建:
#echo 3 > /data/zookeeper/data/myid
将配置好的zookeeper服务整个分别copy到另外两台服务器上,并创建需要的目录。
#mkdir /data/zookeeper/{data,logs} -p
并在相应的data目录下创建各自的myid文件:
#echo 6 > /data/zookeeper/data/myid
#echo 9 > /data/zookeeper/data/myid
切换到bin目录,分别启动zk服务:
./zkServer.sh start
三台都启动完成后,发现报错了:
2017-11-07 15:31:01,300 [myid:3] - WARN [WorkerSender[myid=3]:QuorumCnxManager@588] - Cannot open channel to 9 at election address /10.10.8.16:3888
java.net.ConnectException: Connection refused (Connection refused)
排错:
1、怀疑是防火墙的问题,这是内网啊,所以不是防火墙;
2、端口被占用了,lsof -i:3888,没有输出啊,所以端口也没占用;
3、ip地址不是本机的网卡
云服务器采用虚拟化的技术,监听的网卡是属于物理网关的网卡,而虚拟化机内部自然没有这个网卡。
在配置文件添加一下参数,重启服务正常:
quorumListenOnAllIPs=true
2、查看zk状态
#./zkServer.sh status
3、zookeepr常用的四字节命令:
ZooKeeper四字命令
|
功能描述
|
---|---|
conf | 3.3.0版本引入的。打印出服务相关配置的详细信息。 |
cons | 3.3.0版本引入的。列出所有连接到这台服务器的客户端全部连接/会话详细信息。包括"接受/发送"的包数量、会话id、操作延迟、最后的操作执行等等信息。 |
crst | 3.3.0版本引入的。重置所有连接的连接和会话统计信息。 |
dump | 列出那些比较重要的会话和临时节点。这个命令只能在leader节点上有用。 |
envi | 打印出服务环境的详细信息。 |
reqs | 列出未经处理的请求 |
ruok | 测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应。 |
stat | 输出关于性能和连接的客户端的列表。 |
srst | 重置服务器的统计。 |
srvr | 3.3.0版本引入的。列出连接服务器的详细信息 |
wchs | 3.3.0版本引入的。列出服务器watch的详细信息。 |
wchc | 3.3.0版本引入的。通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。 |
wchp | 3.3.0版本引入的。通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。 |
mntr |
3.4.0版本引入的。输出可用于检测集群健康状态的变量列表 |
#echo mntr | nc ip port
ip:zk服务器的IP地址; port:zk服务的端口
二、kafka集群
将下载好的包上传到服务器,并解压到/data目录下:
#tar xf kafka_2.11-0.11.0.0.tgz
只需要修改server.properties文件、consumer.properties、producer.properties文件
server.properties文件主要注意三个地方:
broker.id=0 #每个broker在集群中必须是唯一的,如有三个节点可以分别设置为(0、1、2)
host.name=10.10.8.16 #host.name为个服务器的IP地址,根据自己的情况填写
zookeeper.connect=10.10.8.16:2181,10.10.9.29:2181,10.10.11.92:2181
#cat server.properties
broker.id=0
delete.topic.enable=true
listeners=PLAINTEXT://10.10.89.219: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=/data/kafka/kafka-logs
num.partitions=4
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=10.10.8.16:2181,10.10.9.29:2181,10.10.11.92:2181
zookeeper.connection.timeout.ms=100000
zookeeper.session.timeout.ms=50000
group.initial.rebalance.delay.ms=0
将配置好的服务分别copy到另外两台服务器上面:
!!!注意修改broker.id、host.name,为各自服务器对应的。
切换到bin目录,启动kafka服务:./kafka-server-start.sh -daemon ../config/server.properties &
2、创建topic
#./kafka-topics.sh --create --zookeeper 10.10.11.92:2181,10.10.8.16:2181,10.10.9.29:2181 --replication-factor 2 --partitions 9 --topic userlog
参数解释:
zookeeper:zookeepr集群的地址
replication-factor:复制两份
partitions:创建9个partition
topic: topic名称
使用 describe 命令来显示 topic 详情
#./kafka-topics.sh --describe --zookeeper 10.10.11.92:2181,10.10.8.16:2181,10.10.9.29:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:2 Configs:
Topic: test Partition: 0 Leader: 3 Replicas: 3,2 Isr: 3,2
1) Leader 是给定分区的节点编号,每个分区的部分数据会随机指定不同的节点
2) Replicas 是该日志会保存的复制
3) Isr 表示正在同步的复制