kafka配置文档
1,安装部署
集群规划
node2 node3 node4
zk zk zk
kafka kafka kafka
2,kafka的下载
http://kafka.apache.org/downloads.html
3,集群部署
3.1解压安装包,不修改名称
[itwise@node2 software]$ tar -zxvf kafka_2.11-2.4.1.tgz -C /opt/module/
3.2修改名
[itwise@node2 software]$ cd ../module/
[itwise@node2 module]$ mv kafka_2.11-2.4.1.tgz kafka
我没修改
3.3在/opt/module/kafka 目录下创建 logs 文件夹
[itwise@node2 ~]$ cd /opt/module/kafka_2.11-2.4.1/
[itwise@node2 kafka]$ mkdir logs
3.4修改配置文件
[itwise@node2 kafka]$ cd config/
[itwise@node2 config]$ vim server.properties
修改唯一编号:
node2:broker.id=0 node3:broker.id=1 node4:broker.id=2
输入以下内容:
#broker 的全局唯一编号,不能重复
broker.id=0
#删除 topic 功能使能,当前版本此配置默认为 true,已从配置文件移除
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
修改:#kafka 运行日志存放的路径
log.dirs=/opt/module/kafka/logs
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
修改:#配置连接 Zookeeper 集群地址
zookeeper.connect=node2:2181,node3:2181,node4:2181
3.5配置环境变量
[itwise@node2 module]$ sudo vim /etc/profile.d/my_env.sh
添加:path
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka_2.11-2.4.1
export PATH=$PATH:$KAFKA_HOME/bin
分发环境变量
[itwise@node2]$scp -r /etc/profile.d/my_env.sh root@node3://etc/profile.d/
[itwise@node2]$scp -r /etc/profile.d/my_env.sh root@node4://etc/profile.d/
[itwise@node2]$ source /etc/profile
[itwise@node3]$ source /etc/profile
[itwise@node4]$ source /etc/profile
3.6分发kafka安装包并修改脚本
[itwise@node2 bin] my_rsync.sh kafka_2.11-2.4.1/
修改 :broker.id
[itwise@node3 config]$ vim server.properties
[itwise@node4 config]$ vim server.properties
broker.id=1、broker.id=2
注:broker.id 不得重复
3.7启动集群
!!!一定要先起动和先关闭zookeeper集群
[itwise@node2 bin]$ zk_cluster.sh start
3.8编集群一键起kafka脚本
my_kafka.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo "Input Args Error....."
exit
fi
for i in node2 node3 node4
do
case $1 in
start)
echo "==================START $i KAFKA==================="
ssh $i /opt/module/kafka_2.11-2.4.1/bin/kafka-server-start.sh -daemon
/opt/module/kafka_2.11-2.4.1/config/server.properties
;;
stop)
echo "==================STOP $i KAFKA==================="
ssh $i /opt/module/kafka_2.11-2.4.1/bin/kafka-server-stop.sh stop
;;
*)
echo "Input Args Error....."
exit
;;
esac
done
3.9编写一键查看进程脚本jps
my_jps.sh
#!/bin/bash
for host in node2 node3 node4
do
echo "********$host******jps***********"
ssh $host jps
done
3.10,给shell命令赋予执行权限
chmod 744 my_jps.sh
chmod 744 my_kafka.sh
4,查看kafka有没有注册到zookeeper中
[itwise@node2 ~]$ cd /opt/module/zookeeper-3.5.7/zkData/
[itwise@node2 zkData]$ ll
总用量 12
-rw-rw-r--. 1 itwise itwise 2 3月 6 22:33 myid
drwxrwxr-x. 2 itwise itwise 4096 3月 11 13:43 version-2
-rw-rw-r--. 1 itwise itwise 4 3月 11 13:43 zookeeper_server.pid
看节点
[itwise@node2 bin]$ zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /brokers
[ids, seqid, topics]
[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids
[0, 1, 2]
4.1查看当前服务器中的所有
[itwise@node2 kafka_2.11-2.4.1]$ bin/kafka-topics.sh --zookeeper node2:2181 --list
新安装没有创建,所以为空
-
查看topic 列表
[itwise@node2 kafka_2.11-2.4.1]$ kafka-topics.sh --list --bootstrap-server node2:9092 first secound
4.2创建 topic
不带副本
[itwise@node2 kafka_2.11-2.4.1]$ bin/kafka-topics.sh --create --bootstrap-server node2:9092 --topic secound
带副本
[itwise@node2 kafka_2.11-2.4.1]$ kafka-topics.sh --create --bootstrap-server node2:9092 --topic second --partitions 2 --replication-factor 3
选项说明:
--topic 定义 topic 名
--replication-factor 定义副本数
--partitions 定义分区数
4.3查看Topic详情,可以看见里面的内容
kafka-topics.sh --describe --bootstrap-server node2:9092 --topic first
Topic: first PartitionCount: 1 ReplicationFactor: 3 Configs: segment.bytes=1073741824
Topic: first Partition: 0 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
4.4修改Topic的分区数(只能往大的地方改动)
[itwise@node2 kafka_2.11-2.4.1]$ kafka-topics.sh --alter --bootstrap-server node2:9092 --topic secound --partitions 2
查看是否修改:
[itwise@node2 kafka_2.11-2.4.1]$ kafka-topics.sh --describe --bootstrap-server node2:9092 --topic secound
4.5删除Topic,原有存储在/opt/module/kafka_2.11-2.4.1/logs的文件,末尾会增加 -delete 字样
[itwise@node2 kafka_2.11-2.4.1]$ kafka-topics.sh --delete --bootstrap-server node2:9092 --topic secound
4.6生产者生产消息
[itwise@node2 kafka_2.11-2.4.1]$ kafka-console-producer.sh --broker-list node2:9092 --topic first
4.6.1消费者消费数据offset重置问题
[itwise@node2 ~]$ kafka-console-consumer.sh --bootstrap-server node2:9092 --topic first
过一会,带第一个消费这接收数据一段时间之后,另开一个端口启动一个消费者
kafka-console-consumer.sh --bootstrap-server node2:9092 --topic first
这个时候,新启动的消费者不能获取生产者以前生产的数据,只能从最新的数据来取出。
新启动的消费者组中的消费者为何消费不到topic中的数据???
4.6.2重新给 生产者进行修改两个分区后,重新生产者重新输入,消费者没有反应,
4.6.3即使将消费者重新启动,原来输入的数据依旧没有
生产者重新输入消息,消费者按照分区,又进行的订阅
4.7消费者读取生产者生产的以前消息的方法
如果给这个消费者添加: --from-beginning 才可以将以前的数据取出。
topic first --from-beginning
[itwise@node2 ~]$ kafka-console-consumer.sh --bootstrap-server node2:9092 --topic first --from-beginning
4.8消费者组
使用如下命令,启动两个端口,作为同一个组中的两个消费者
kafka-console-consumer.sh --bootstrap-server node2:9092 --topic first --consumer.config /opt/module/kafka_2.11-2.4.1/config/consumer.properties
另开一个组,启动一个消费者
kafka-console-consumer.sh --bootstrap-server node2:9092 --topic first --group aa
1: node2 2: node2为一组
3: node3 4: node2为一组