大数据平台分布式搭建 - Kafka分布式部署

Section I: 文件清单
  1. kafka_2.12-0.10.2.1.gz
Section II: 下载链接

[kafka 下载链接]: https://kafka.apache.org/downloads

Section III: Kafka分布式部署

总览,集群信息:

节点角色MasterSlave1Slave2
IP192.168.137.128192.168.137.129192.168.137.130
HostNameBlogMasterBlogSlave1BlogSlave2
HadoopBolgMaster-YESBlogSlave1-YESBlogSlave2-YES
ZookeeperBolgMaster-YESBlogSlave1-YESBlogSlave2-YES
KafkaBolgMaster-YESBlogSlave1-YESBlogSlave2-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)

进入该文件后,修改四个选项:

  1. broker.id
The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
  1. delete.topic.enable
# Switch to enable topic deletion or not, default value is false
delete.topic.enable=true
  1. 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
  1. 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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值