1. 下载
Apache kafka 官方: http://kafka.apache.org/downloads.html
Scala 2.11 - kafka_2.11-0.10.2.0.tgz (asc, md5)
2.Kafka集群安装
第一步:安装JDK &配置JAVA_HOME
第二步:安装Zookeeper
参照Zookeeper官网搭建一个ZK集群, 并启动ZK集群。
启动kafka之前一定要先启动zookeeper集群
第三步:解压Kafka安装包到(apps目录)
第四步:修改配置文件config/server.properties
[root@wangzhihua2 ~]# cd ./apps/kafka_2.11-0.10.2.1/config/server.properties
需要修改的地方有:
Ø broker.id从0开始 每一台的broker.id都不一样,需要手动的去更改
Ø log.dirs=/root/kafkaData/ 设置Kafka的消息数据存储路径
Ø 配置zookeeper的连接地址zookeeper.connect=hdp-01:2181,hdp-02:2181,hdp-03:2181 //zookeeperServers列表,各节点以逗号分开
Ø 更改listeners listeners=PLAINTEXT://wangzhihua1:9092
注意 :这个ip是kafka所在的机器上的ip并不都是wangzhihua1,每台机器上配置自己的主机名
Ø 修改分区数 默认是1 改为3 num.partitions=3
Ø 安装包分发
for i in 2 3 ; do scp -r kafka_2.11-0.10.2.1/ wangzhihua$i:$PWD ;done
切记上传完成后 一次修改各个主机上的 broker.id
再其它几台节点上,分别修改该配置文件。
broker.id从0开始 每一台的broker.id都不一样,需要手动的去更改 broker.id=1 //为依次增长的:0、1、2、3、4,集群中唯一id log.dirs=/root/kafkaData/ // Kafka的消息数据存储路径 配置zookeeper的连接地址 zookeeper.connect=hdp-01:2181,hdp-02:2181,hdp-03:2181 //zookeeperServers列表,各节点以逗号分开 vi zookeeper.properties dataDir=/root/zkdata #指向你安装的zk的数据存储目录 delete.topic.enable=true listeners=PLAINTEXT://hdp-01:9092 修改kafka数据的存储位置 log.dirs=/root/kafkaData/ num.partitions=3 # 安装包分发 for i in 2 3 ; do scp -r kafka_2.11-0.10.2.1/ hdp-0$i:$PWD ;done 切记上传完成后 一次修改各个主机上的 broker.id 再其它几台节点上,分别修改该配置文件。 |
3kafka操作指令
1.Kafka的启停(前后台)
启动kafka集群需要手动的一台一台的去启动和zookeeper一样
启动kafka之前,必须要保证zookeeper是启动的。
在每台节点上启动:
./kafka-server-start.sh 前台启动
./kafka-server-start.sh -daemon ../config/server.properties 后台启动
1.1启动脚本
brokers="wangzhihua1 wangzhihua2 wangzhihua3"
kafka_home="/root/apps/kafka_2.11-0.10.2.1"
for i in $brokers
do
echo "Starting kafka on ${i} ... "
ssh ${i} "source /etc/profile; nohup sh ${kafka_home}/bin/kafka-server-start.sh ${kafka_home}/config/server.properties > /dev/null 2>&1 &"
if [[ $? -ne 0 ]]; then
echo "Start kafka on ${i} is OK !"
fi
done
echo kafka kafka are started !
1.2. 停止脚本
brokers="wangzhihua1 wangzhihua2 wangzhihua3"
kafka_home="/root/apps/kafka_2.11-0.10.2.1"
for i in $brokers
do
echo "Stoping kafka on ${i} ... "
ssh ${i} "source /etc/profile; nohup sh ${kafka_home}/bin/kafka-server-stop.sh ${kafka_home}/config/server.properties > /dev/null 2>&1 &"
if [[ $? -ne 0 ]]; then
echo "Start kafka on ${i} is OK !"
fi
done
echo kafka kafka are stop !
2.主题相关操作停止kafka命令: # ./kafka-server-stop.sh
kafka常用指令
进入kafka根目录,创建Topic名称为: test的主题
或者,您也可以将代理配置为在发布不存在的主题时自动创建主题,而不是手动创建主题。
./kafka-topics.sh --create --zookeeper wangzhihua1:2181,wangzhihua2:2181,wangzhihua3:2181 --replication-factor 3 --partitions 1 --topic test
查看Topic的详细信息
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: test Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
模拟客户端去发送消息
Kafka带有一个命令行客户端,它将从文件或标准输入中获取输入,并将其作为消息发送到Kafka集群。默认情况下,每行将作为单独的消息发送。运行生产者,然后在控制台中输入几条消息发送到服务器。一般情况为了测试 消费者个生产者不要在一台机器上
发消息的机器
接收消息的机器
/kafka-console-producer.sh--broker-list
wangzhihua1:9092,wangzhihua2:9092,wangzhua3:9092 --topic test
模拟客户端去接受消息
./kafka-console-consumer.sh --bootstrap-server ip:9092,ip2:9092,ip3:9092 --topic flink_log_test --from-beginning
注意:消费者还可以直接连接到zookeeper,但是生产者不可以
kafka-console-consumer.sh --zookeeper hdp-01:2181,hdp-02:2181,hdp-03:2181 --from-beginning --topic hellotopic
设置消费最大数量
--max-messages 100
打印key
--property print.key=true 打印key
./kafka-console-consumer.sh --zookeeper 127.0.0.1:2181 --from-beginning --topic flink_log_test --max-messages 100
测试一下容错能力.
Kill -9 pid[leader节点]
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: test Partition: 0 Leader: 2 Replicas: 1,2,0 Isr: 2,0
另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中:
虽然最初负责续写消息的leader down掉了,但之前的消息还是可以消费的:
--from-beginning从头开始消费
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic test
删除主题:慎用,只会删除zookeeper中的元数据,消息文件须手动删除
bin/kafka-topics.sh --delete --zookeeper hdp-01:2181,hdp-02:2181,hdp-03:2181 --topic test2
增加topic分区数
为topic t_cdr 增加10个分区
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic t_cdr --partitions 10
查看topic某分区偏移量最大(小)值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic hive-mdatabase-hostsltable --time -1 --broker-list node86:9092 --partitions 0
注: time为-1时表示最大值,time为-2时表示最小值
查看kafka主题中的数据量脚本
if [[ $# -eq 1 ]];then
kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic $1
else
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 127.0.0.1:9092 --time $2 --top
ic $1
fi
查看指定topic信息
bin/kafka-topics.sh --zookeeper node01:2181 --describe --topic t_cdr
查看topic消费进度
由于kafka 消费者记录 group 的消费 偏移量 有两种方式 :
1)kafka 自维护 (新)
2)zookpeer 维护 (旧) ,已经逐渐被废弃
所以 ,脚本查看 消费偏移量的方式有两种 kafka自维护 / zookeeper维护
zookeeper维护
这个会显示出consumer group的offset情况, 必须参数为--group, 不指定--topic,默认为所有topic
Displays the: Consumer Group, Topic, Partitions, Offset, logSize, Lag, Owner for the specified set of Topics and Consumer Group
bin/kafka-consumer-groups.sh --zookeeper localhost:2181 --describe --group PV
Group Topic Pid Offset logSize Lag Owner
pv page_visits 0 21 21 0 none
pv page_visits 1 19 19 0 none
pv page_visits 2 20 20 0 none
offset 和 logsize还有 lag ,分别为当前偏移量,总条数,落后的偏移量(未消费的条数)。
注意:
这种方法是针对高级级kafka读取api,因为高级级api需要按照group中的consumer按照offset来读取数据,并且所有维护offset信息都保存在zookeeper中。但是低级api不需要group,offset由consumer自行维护,所以针对这类topic用户是没法使用这个命令读取结果的。
查看一个消费组中消费者消费的情况
kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --describe --group hscs_group
kafka自维护
kafka-consumer-groups.sh --new-consumer --bootstrap-server 127.0.0.1:9092 --list
注意:当我们使用new KafkaConsumer进行消息消费,要想通过kafka-consumer-groups.sh获取整个group的offset、lag延迟信息,也必须加上–new-consumer,告知kafka-consumer-groups.sh,这个group的消费者使用的是new kafka consumer
查看某个topic的message数量(展示每一个分区数据量的大小)
./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 47.52.199.51:9092 --topic consumer-send
查看topic列表
./bin/kafka-topics.sh --zookeeper zk.server --list
topic级别修改 修改topic数据保存时间
kafka-configs.sh --zookeeper 127.0.0.1:2181 --alter --entity-type topics --entity-name 主题名 --add-config retention.ms=86400000
查看__consumer_offsets
kafka-simple-consumer-shell.sh --topic __consumer_offsets --broker-list
127.0.0.1:9092 --partition 3 --format
"kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter"
按照offset消费kafka分区数据
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --property
print.key=true --partition 0 --offset 172 --topic nginx_log | more +n 1
扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦
扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦
扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦