环境:
虚拟机 vmware
操作系统 红帽7(red hat 7)、centos7
jdk1.8
zookeeper 3.4.6
安装配置
解压:tar -zvxf kafka_2.11-1.1.0.tgz
vi /etc/profile
JAVA_HOME=/user/java/jdk1.8.0_144
JRE_HOME=/user/java/jdk1.8.0_144/jre
HADOOP_HOME=/home/hadoop/hadoop-2.9.0
HIVE_HOME=/home/hadoop/hive-2.3.3
ZK_HOME=/home/hadoop/zookeeper-3.4.6
HBASE_HOME=/home/hadoop/hbase-1.2.6
FLUME_HOME=/home/hadoop/fulme-1.8.0
SCALA_HOME=/home/hadoop/scala-2.11.7
SPARK_HOME=/home/hadoop/spark-2.2.0
KAFAK_HOME=/home/hadoop/kafka_2.11
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/bin
PATH=/usr/local/nginx/sbin:$/KAFKA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$JAVA_HOME/bin:$FLUME_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/etc/hadoop:$HIVE_HOME/bin:$/home/hadoop/sqoop-1.4.7/bin:$ZK_HOME/bin:$HBASE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASSPATH HADOOP_HOME SCALA_HOME SPARK_HOME PATH
source /etc/profile
kafka配置
${kafka_home}/config/server.properties
==============================================================================================================
1、使用默认配置就好,注意五个个选项,brokerid、num.partitions、default.replication.factor、zookeeper.connect(外部zookeeper)、zookeeper.connection.timeout.ms、log.dirs
2、brokerid,当前节点的id号,唯一标识,建议给顺序数字,方便管理
3、num.partitions,控制设定几个分区,default.replication.factor,控制设定几个备份。
这里博主有三个节点,所以各给了3。同学们也可根据自身实际情况以及自身需求给定
4、zookeeper.connect指定外部zk源的各个节点。若无特殊指定,外部zk集群默认端口2181
5、zookeeper.connection.timeout.ms根据自身网络情况设定,通常默认就好
==============================================================================================================
-
-
############################# Server Basics #############################
-
# The id of the broker. This must be set to a unique integer for each broker.
-
broker.id=0
-
改为 broker.id=1
-
############################# Socket Server Settings #############################
-
listeners=PLAINTEXT://192.168.163.131:9092
-
# The port the socket server listens on
-
port=9092 #旧版本有
-
############################# Log Basics #############################
-
# A comma seperated list of directories under which to store log files
-
log.dirs=/tmp/kafka-logs
- 改为 log.dirs=/home/hadoop/kafka_2.11-1.1.0
-
-
############################# Zookeeper #############################
-
# Zookeeper connection string (see zookeeper docs for details).
-
# This is a comma separated host:port pairs, each corresponding to a zk
-
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
-
# You can also append an optional chroot string to the urls to specify the
-
# root directory for all kafka znodes.
-
zookeeper.connect=192.168.163.130:2181,192.168.163.131:2181,192.168.163.132:2181
- 改为 zookeeper.connect=sure1:2181,sure2:2181,sure3:2181
-
# Timeout in ms for connecting to zookeeper
-
zookeeper.connection.timeout.ms=6000
3.4将配置好的一份server.properties分发给各个节点
记得修改brokerid选项。
4、启动
各个节点均启动
kafka-server-start.sh /usr/local/kafka_2.11-0.9.0.1/config/server.properties &(> /usr/local/kafka_2.11-0.9.0.1/logs/logs & //启动线程并写入日志)
5、验证
思路:以下给出几条kafka指令。创建一个topic,一个节点作为生产者,两个节点作为消费者分别看看能否接收数据,进行验证
创建及查看topic
-
kafka-topics.sh -list -zookeeper 192.168.163.130:2181,192.168.163.131:2181,192.168.163.132:2181 查看所有topic
-
kafka-topics.sh --create --zookeeper 192.168.163.130:2181,192.168.163.131:2181,192.168.163.132:2181 --replication-factor 3 --partitions 3 --topic xxx (rf参数副本数,par参数分区数,xxx是topic的名称)创建topic
开启生产者以及消费者
-
kafka-console-producer.sh --broker-list 192.168.163.130:9092,192.168.163.131:9092,192.168.163.132:9092 --topic test 生产者
-
kafka-console-consumer.sh --zookeeper 192.168.163.130:2181,192.168.163.131:2181,192.168.163.132:2181 --topic test --from-beginning 消费者
如图,是博主之前建立的topic
node1开启生产者:
node2、node3开启消费者,查看队列:
消费者均收到生产者消息,即为成功,这里博主之前的消息未清理,其他多余消息请忽略
6、常见问题解决
6.1、问题描述,启动过一次以后,修改brokerID,再启动,无法成功
这是由于kafka日志系统无法写入导致的,每次写入日志文件时候,会在日志文件同目录下,生成相关几个文件。其中meta.properties会记录之前brokerID,若是再启动,日志会与kafka的brokerID进行比对,若是一致才准许写入指定的log文件,若是不一致则报错,线程停止
7 Kafka常用命令
以下是kafka常用命令行总结:
1.查看topic的详细信息
./kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -topic testKJ1
2、为topic增加副本
./kafka-reassign-partitions.sh -zookeeper 127.0.0.1:2181 -reassignment-json-file json/partitions-to-move.json -execute
3、创建topic
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testKJ1
4、为topic增加partition
./bin/kafka-topics.sh –zookeeper 127.0.0.1:2181 –alter –partitions 20 –topic testKJ1
5、kafka生产者客户端命令
./kafka-console-producer.sh --broker-list localhost:9092 --topic testKJ1
6、kafka消费者客户端命令
./kafka-console-consumer.sh -zookeeper localhost:2181 --from-beginning --topic testKJ1
7、kafka服务启动
./kafka-server-start.sh -daemon ../config/server.properties
8、下线broker
./kafka-run-class.sh kafka.admin.ShutdownBroker --zookeeper 127.0.0.1:2181 --broker #brokerId# --num.retries 3 --retry.interval.ms 60
shutdown broker
9、删除topic
./kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic testKJ1 --zookeeper 127.0.0.1:2181
./kafka-topics.sh --zookeeper localhost:2181 --delete --topic testKJ1
10、查看consumer组内消费的offset
./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper localhost:2181 --group test --topic testKJ1