Section I: 文件清单
- kafka_2.12-0.10.2.1.gz
Section II: 下载链接
[kafka 下载链接]: https://kafka.apache.org/downloads
Section III: Kafka分布式部署
总览,集群信息:
节点角色 | Master | Slave1 | Slave2 |
---|---|---|---|
IP | 192.168.137.128 | 192.168.137.129 | 192.168.137.130 |
HostName | BlogMaster | BlogSlave1 | BlogSlave2 |
Hadoop | BolgMaster-YES | BlogSlave1-YES | BlogSlave2-YES |
Zookeeper | BolgMaster-YES | BlogSlave1-YES | BlogSlave2-YES |
Kafka | BolgMaster-YES | BlogSlave1-YES | BlogSlave2-Yes |
Step 1: 在主节点进行解压Kafka安装包至指定目录
[root@BlogMaster ~]# tar -zxvf kafka_2.12-0.10.2.1.gz -C /opt/cluster/
Step 2: 在在主节点的Kafka安装目录下创建名为“logs”的文件夹,用于记录Kafka操作记录
[root@BlogMaster kafka_2.12-0.10.2.1]# mkdir logs
Step 3: 在主节点,修改server.properties日志文件(位于/opt/cluster/kafka_2.12-0.10.2.1/config)
进入该文件后,修改四个选项:
- broker.id
The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
- delete.topic.enable
# Switch to enable topic deletion or not, default value is false
delete.topic.enable=true
- log.dirs
# A comma seperated list of directories under which to store log files
log.dirs=/opt/cluster/kafka_2.12-0.10.2.1/logs
- zookeeper.connect
# 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=BlogMaster:2181,BlogSlave1:2181,BlogSlave2:2181
Step 4: 在主节点配置Kafka的环境变量
进入/etc目录下profile文件,添加如下内容:
export KAFKA_HOME=/opt/cluster/kafka_2.12-0.10.2.1
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ANT_HOME/bin:$KAFKA_HOME/bin
之后执行如下操作,使配置生效。
[root@BlogMaster etc]# source profile
Step 5: 分发主节点配置好的Kafka文件至另外两台Slave(BlogSlave1和BlogSlave2)节点
结合scp命令,将刚在主节点BlogMaster配置好的kafka整个文件分别分发至BlogSlave1和BlogSlave2节点。
对于BlogSlave1:
[root@BlogMaster cluster]# scp -r kafka_2.12-0.10.2.1/ BlogSlave1:$PWD
对于BlogSlave2:
[root@BlogMaster cluster]# scp -r kafka_2.12-0.10.2.1/ BlogSlave2:$PWD
Step 6: 修改两台Slave节点的server.properties文件的broker.id选项
配置kafka集群式,集群三台节点的kafka关联的broker.id作为集群唯一标识,应完全不同,而目前由于拷贝的方式导致它们相同。 故应调整BlogSlave1和BlogSlave2节点的server.properties下的broker.id选项。
对于BlogSlave1:
进入该节点kafka安装文件下的config子目录下,修改server.properties的broker.id选项,具体如下:
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1
对于BlogSlave2:
进入该节点kafka安装文件下的config子目录下,修改server.properties的broker.id选项,具体如下:
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=2
Step 7: 分发主节点的环境配置profile文件至两台Slave节点
执行如下命令,下发主节点BlogMaster已配置好的profile的文件至BlogSlave1和BlogSlave2节点,具体命令如下:
[root@BlogMaster etc]# scp -r profile BlogSlave1:$PWD
[root@BlogMaster etc]# scp -r profile BlogSlave2:$PWD
之后,在BlogSlave1和BlogSlave2节点执行source profile命令,使得两台Slave节点的环境变量配置生效。
Section IV: Kafka命令行操作
注意启动Kafka集群前,先要确保Zookeeper服务启动,因为Kafka集群依赖于Zookeeper的协调服务。
Step 1: 三台节点分别启动zookeeper服务
此部分内容可参照我此前Zookeeper博客。
Step 2: 三台节点分别启动Kafka服务
对于BlogMaster节点:
[root@BlogMaster kafka_2.12-0.10.2.1]# bin/kafka-server-start.sh config/server.properties &
对于BlogSlave1节点:
[root@BlogSlave1 kafka_2.12-0.10.2.1]# bin/kafka-server-start.sh config/server.properties &
对于BlogSlave2节点:
[root@BlogSlave2 kafka_2.12-0.10.2.1]# bin/kafka-server-start.sh config/server.properties &
执行上述命令后,分别输入Jps命令,查看三台节点的Kafka进程是否启动,这里以主节点BlogMaster为例。
[root@BlogMaster kafka_2.12-0.10.2.1]# jps
9890 Jps
7027 QuorumPeerMain
9589 Kafka
Step 3: 创建生产者/消费者服务
- Step 3.1: 创建test_topic主题
在主节点BlogMaster创建“test_topic”主题,具体命令如下:
[root@BlogMaster kafka_2.12-0.10.2.1]# bin/kafka-topics.sh --zookeeper BlogMaster:2181 --create --replication-factor 3 --partitions 1 --topic test_topic
- Step 3.2: 主节点BlogMaster启动生产者服务
在主节点BlogMaster启动生产者服务,具体如下:
[root@BlogMaster kafka_2.12-0.10.2.1]# bin/kafka-console-producer.sh --broker-list BlogMaster:9092 --topic test_topic
值得注意,此处shell窗口将处于输入状态,待下一步的消费者服务启动后,可通过此窗体输入任意数据,而此数据将被对应监听的消费者服务抽取。
- Step 3.3: 集群任意节点启动消费者服务
这里以BlogSlave1节点为例,启动消费者服务。
[root@BlogSlave1 kafka_2.12-0.10.2.1]# bin/kafka-console-consumer.sh --zookeeper BlogMaster:2181 --from-beginning --topic test_topic
- Step 3.4: 生产者/消费者数据传递
对于BlogMaster节点处的生产者:
[root@BlogMaster kafka_2.12-0.10.2.1]# bin/kafka-console-producer.sh --broker-list BlogMaster:9092 --topic test_topic
da
I love xiaoxiong
对于BlogSlave1节点处的消费者:
[root@BlogSlave1 kafka_2.12-0.10.2.1]# bin/kafka-console-consumer.sh --zookeeper BlogMaster:2181 --from-beginning --topic test_topic
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
da
I love xiaoxiong
Section V: Kafka与Flume交互
Step 1: 创建名为“flume_log_kafka.conf”的空文件
在Flume安装目录下传递job子目录,创建该文件,内部包含内容为:
agent.sources = s1
agent.channels = c1
agent.sinks = k1
agent.sources.s1.type=exec
agent.sources.s1.command=tail -F /opt/cluster/apache-flume-1.8.0-bin/logs/flume.log
agent.sources.s1.channels=c1
agent.channels.c1.type=memory
agent.channels.c1.capacity=10000
agent.channels.c1.transactionCapacity=100
#设置一个kafka接收器
agent.sinks.k1.type= org.apache.flume.sink.kafka.KafkaSink
#设置kafka的broker地址和端口号(所有的)
agent.sinks.k1.brokerList=BlogMaster:9092
#设置kafka的topic
agent.sinks.k1.topic=flume_log_kafka
#设置一个序列化方式
agent.sinks.k1.serializer.class=kafka.serializer.StringEncoder
#组装
agent.sinks.k1.channel=c1
值得注意,agent.sources.s1.command=tail -F /opt/cluster/apache-flume-1.8.0-bin/logs/flume.log的设置,表明此配置文件将Flume操作记录的日志文件作为生产者。此外,Kafka所需的主题为flume_log_kafka,已设置于agent.sinks.k1.topic中。
Step 2: 依据“flume_log_kafka.conf”文件,在BlogMaster节点处启动Flume Agent服务
启动命令如下:
[root@BlogMaster apache-flume-1.8.0-bin]# bin/flume-ng agent --conf conf/ --name agent --conf-file job/flume-log-kafka.conf -Dflume.root.logger=INFO,console
Step 3: 在任意节点启动Kafka的消费者服务,用于观察flume.log日志变化
这里以BlogSlave1节点为例,启动命令如下:
[root@BlogSlave1 kafka_2.12-0.10.2.1]# bin/kafka-console-consumer.sh --zookeeper BlogMaster:2181 --from-beginning --topic flume_log_kafka
Step 4: 操作位于BlogMaster节点的Flume日志变化的flume.log文件,对比位于BlogSlave1消费者接收数据情况
清除原始flume.log(位于/opt/cluster/apache-flume-1.8.0-bin/logs)的数据后,为其新增如下内容:
I Love Xiaoxiong and Our Baby!
I
Love
Xiao
Xiong
I Love Xiao Xiong
观察BlogSlave1节点处消费者数据情况,看是否出现上述内容。若出现且相同,则表明消费成功。
[root@BlogSlave1 kafka_2.12-0.10.2.1]# bin/kafka-console-consumer.sh --zookeeper BlogMaster:2181 --from-beginning --topic flume_log_kafka
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
I
Love
Xiao
Xiong
I Love Xiao Xiong