1.下载
Kafka版本选择:
Flume对Kafka版本的要求:http://flume.apache.org/FlumeUserGuide.html#kafka-sink
Spark对Kafka版本的要求:http://spark.apache.org/docs/2.3.0/structured-streaming-kafka-integration.html
Kafka版本下载:
0.10版本以上下载:http://mirrors.hust.edu.cn/apache/kafka/
所有版本下载地址:http://kafka.apache.org/downloads
这里选择下载kafka_2.11-0.10.2.2.tgz版本,并上传至主节点/home/hadoop/app目录下。
2.解压
使用如下命令解压Kafka安装包:
tar -zxvf kafka_2.11-0.10.2.2.tgz
删除Kafka安装包:
rm -rf kafka_2.11-0.10.2.2.tgz
3. 修改配置文件
3.1修改zookeeper.properties
$ vi zookeeper.properties
#Zookeeper 数据存储路径与Zookeeper配置文件保持一致
dataDir=/home/hadoop/data/zookeeper/zkdata
3.2修改consumer.properties
$ vi consumer.properties
#配置Zookeeper集群连接地址
zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181
3.3修改producer.properties
$ vi producer.properties
#修改kafka集群配置地址(0.10)
bootstrap.servers=master:9092,slave1:9092,slave2:9092
#修改kafka集群配置地址(0.8)
metadata.broker.list=master:9092,slave1:9092,slave2:9092
3.4修改server.properties
$ vi server.properties
#配置Zookeeper集群地址
zookeeper.connect=master:2181,slave1:2181,slave2:2181/kafka1.0
#存储日志文件目录
log.dirs=/home/hadoop/data/kafka-logs
4. Kafka安装目录同步
通过集群分发脚本将kafka整个安装目录分发到其他节点
$ deploy.sh kafka_2.11-0.10.2.2 /home/hadoop/app/ slave
5. 再次修改server.properties
在各个节点分别修改server.properties
#修改hadoop01节点
broker.id=1
#修改hadoop02节点
broker.id=2
#修改hadoop03节点
broker.id=3
6. 创建日志目录
通过远程脚本在各个节点分别创建日志目录:
runRemoteCmd.sh "mkdir /home/hadoop/data/kafka-logs" all
7.Kafka集群启动与测试
7.1启动Zookeeper集群
$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" all
7.2启动Kafka集群
bin/kafka-server-start.sh config/server.properties &
7.3查看topic列表
查看topic列表(如果配了根目录,Zookeeper路径需要加上root目录,例如localhost:2181/kafka1.0)
bin/kafka-topics.sh --zookeeper localhost:2181/kafka1.0 --list
7.4创建topic
bin/kafka-topics.sh --zookeeper localhost:2181/kafka1.0 --create --topic test --replication-factor 3 --partitions 3
7.5查看topic详情
bin/kafka-topics.sh --zookeeper localhost:2181/kafka1.0 --describe --topic test
7.6topic数据发送与消费
7.6.1新api使用
hadoop02使用自带脚本消费topic数据
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
hadoop01使用自带脚本向topic发送数据
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
hadoop03使用自带脚本消费topic数据(此时消费最新数据)
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
hadoop03使用自带脚本消费topic数据(从头消费数据)
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
查看特定consumer group 详情
bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 –list
查看topic每个partition数据消费情况
bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --group xxx –describe
参数说明:
Group 消费者组
TOPIC:曾经消费或正在消费的topic
PARTITION:分区编号
CURRENT-OFFSET:consumer group最后一次提交的offset
LOG-END-OFFSET:最后提交的生产消息offset
LAG:消费offset与生产offset之间的差值
CONSUMER-ID:当前消费topic-partition的group成员id
HOST:消费节点的ip地址
CLIENT-ID:客户端id
7.6.2旧api使用
hadoop02使用自带脚本消费topic数据
bin/kafka-console-consumer.sh --zookeeper localhost:2181/kafka1.0 --topic test
hadoop01使用自带脚本向topic发送数据
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
hadoop03使用自带脚本消费topic数据(此时消费最新数据)
bin/kafka-console-consumer.sh --zookeeper localhost:2181/kafka1.0 --topic test
hadoop03使用自带脚本消费topic数据(从头消费数据)
bin/kafka-console-consumer.sh --zookeeper localhost:2181/kafka1.0 --topic test --from-beginning
查看特定consumer group 详情
bin/kafka-consumer-groups.sh --zookeeper localhost:2181/kafka1.0 --list
查看topic每个partition数据消费情况
bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper localhost:2181 --group xxx
参数说明:
Group:消费者组
Topic:消费的topic名称
pid:分区编号
Offset:消费者组在分区上消费的位置
logSize:分区上的累计消息条数
Lag:消费offset与生产offset之间的差值
Owner:线程名称。
8.Kafka集群监控
KafkaOffsetMonitor是一个可以用于监控Kafka的Topic及Consumer消费状况的工具。以程序一个jar包的形式运行,部署较为方便。只有监控功能,使用起来也较为安全。
作用:
1.监控Kafka集群状态,Topic、Consumer Group列表。
2.图形化展示topic和Consumer之间的关系。
3.图形化展示Consumer的offset、Lag等信息。
8.1下载
下载地址:https://github.com/quantifind/KafkaOffsetMonitor(可以使用已经修改版本)
目前kafka Monitor必须使用旧api才可以监控到,新api目前还没有实现。
8.2脚本参数格式
java -cp KafkaOffsetMonitor-assembly-0.2.1.jar
com.quantifind.kafka.offsetapp.OffsetGetterWeb
--zk hadoop01:2181,hadoop02:2181,hadoop03:2181/kafka1.0
--port 8090
--refresh 10.seconds
--retain 2.days
zk:Zookeeper集群地址
port:为开启web界面的端口号
refresh:刷新时间
retain:数据保留时间(单位seconds, minutes, hours, days)
8.3开发kafkamonitor.sh执行脚本
vi kafkamonitor.sh
#!/bin/sh
home=$(cd `dirname $0`; cd ..; pwd)
. ${home}/bin/common.sh
java -cp ${lib_home}KafkaOffsetMonitor-assembly-0.2.0.jar
com.quantifind.kafka.offsetapp.OffsetGetterWeb
--zk hadoop01:2181,hadoop02:2181,hadoop03:2181/kafka1.0
--port 8090
--refresh 10.seconds
--retain 2.days > /dev/null 2>&1 &
8.4脚本授权
给脚本kafkamonitor.sh赋予可执行权限
chmod u+x kafkamonitor.sh
8.5启动监控脚本
bin/kafkamonitor.sh
8.6web可视化
hadoop01:8090