kafka集群的搭建与使用

1. 下载

Apache kafka 官方: http://kafka.apache.org/downloads.html

Scala 2.11  - kafka_2.11-0.10.2.0.tgz (ascmd5)

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.id0开始 每一台的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

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿华田512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值