最终效果
在第二个shell终端输入“Hello,Kafka!”消息到主题topic-demo,第一个shell终端接受到消息。
操作系统信息
[root@localhost opt]# uname -a
Linux localhost 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
JDK的安装与配置
- 下载安装包jdk-8u251-linux-i586.tar.gz,复制到/opt目录下
- 将/opt目录下的安装包解压
[root@localhost opt]# tar zxvf jdk-8u251-linux-i586.tar.gz
- 配置JDK的环境变量,修改 /etc/profile
[root@localhost jdk1.8.0_251]# vi /etc/profile
在文件中添加如下参数
export JAVA_HOME=/opt/jdk1.8.0_251
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=./://$JAVA_HOME/lib:$JRE_HOME/lib
wq保存退出后,执行 source /etc/profile 命令使配置生效
[root@localhost ~]# source /etc/profile
- 通过 java -version 命令验证JDK是否安装成功
[root@localhost ~]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) Client VM (build 25.251-b08, mixed mode)
注意:如果如下错误:No such file or directory
[root@localhost ~]# java -version
-bash: /opt/jdk1.8.0_251/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
则需要执行 yum -y install glibc.i686 命令
[root@localhost ~]# yum -y install glibc.i686
再次执行 java -version 命令后,安装成功
ZooKeeper安装与配置
ZooKeeper是安装Kafka集群的必要组件,Kafka通过ZooKeeper来实施对元数据信息的管理,包括集群、broker、主题、分区等内容
ZooKeeper是一个开源的分布式协调服务,分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护等功能。
在ZooKeeper中共有三个角色:
leader、follower、observer,同一时刻ZooKeeper集群中只会有一个leader,其他的都是follower核observer。observer不参与投票,默认情况下ZooKeeper中只有leader和follower两个角色。
安装ZooKeeper
- 在我上传的资源中下载安装包 zookeeper-3.4.14.tar.gz
- 将安装包放到/opt目录下,然后解压缩
[root@localhost opt]# tar zxvf zookeeper-3.4.14.tar.gz
- 向 /etc/profile 配置文件中添加如下内容
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_HOME/bin
执行 source /etc/profile 命令使配置文件生效
[root@localhost ~]# source /etc/profile
- 修改 ZooKeeper 的配置文件,首先进入 $ZOOKEEPER_HOME/conf 目录,并将 zoo_sample.cfg 文件修改为 zoo.cfg
[root@localhost ~]# cd $ZOOKEEPER_HOME/conf
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
- 然后修改 zoo.cfg 配置文件
[root@localhost conf]# vi zoo.cfg
# ZooKeeper 服务器心跳时间,单位为ms
tickTime=2000
# 投票选举 leader 的初始化时间
initLimit=10
# leader 与 follower 心跳检测最大容忍时间,响应超过 syncLimit*tickTime,leader 认为 follower 失效,从服务器列表中删除 follower
syncLimit=5
# 数据目录
dataDir=/tmp/zookeeper/data
# 日志记录
dataLogDir=/tmp/zookeeper/log
# ZooKeeper 对外服务端口
clientPort=2181
- 创建data和log目录
[root@localhost ~]# mkdir -p /tmp/zookeeper/{data,log}
- 在 /tmp/zookeeper/data目录下创建一个 myid 文件,并写入一个数据,如:0. myid文件里存放的是服务器的编号
[root@localhost ~]# cd /tmp/zookeeper/data/
[root@localhost data]# echo 0 >> myid
- 启动 ZooKeeper
[root@localhost data]# cd /opt/zookeeper-3.4.14/bin/
[root@localhost bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
- 查看状态
[root@localhost bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone
Kafka的安装与配置
在安装完JDK和ZooKeeper之后,就可以执行Kafka broker的安装了。首先,下载 kafka_2.11-2.2.2.tgz ,放到 /opt 目录下并进行解压缩。
- 修改 /etc/profile 文件
[root@localhost kafka_2.11-2.2.2]# vi /etc/profile
添加如下内容
export KAFKA_HOME=/opt/kafka_2.11-2.2.2
执行 source /etc/profile 命令使配置文件生效
[root@localhost ~]# source /etc/profile
- 修改 broker 的配置文件
[root@localhost ~]# vi $KAFKA_HOME/config/server.properties
server.properties 配置参数如下:
# broker 的编号,如果集群中有多个broker,则每个broker的编号需要设置的不同
broker.id=0
# broker 对外提供的服务入口地址
listeners=PLAINTEXT://localhost:9092
# 存放消息日志文件的地址
log.dirs=/tmp/kafka-logs
# Kafka 所需的 ZooKeeper 集群地址
zookeeper.connect=localhost:2181/kafka
- 后台启动 Kafka
[root@localhost ~]# /opt/kafka_2.11-2.2.2/bin/kafka-server-start.sh /opt/kafka_2.11-2.2.2/config/server.properties &
- 通过 jps -l 命令查看Kafka服务进程是否已经启动
[root@localhost ~]# jps -l
2065 sun.tools.jps.Jps
1714 kafka.Kafka # Kafka服务端的进程
1636 org.apache.zookeeper.server.quorum.QuorumPeerMain
生产者与消费者
创建主题
创建一个分区数为1、副本因子为3的主题 topic-demo
[root@localhost kafka_2.11-2.2.2]# bin/kafka-topics.sh --zookeeper localhost:2181/kafka --create --topic topic-demo --replication-factor 1 --partitions 4 Created topic "topic-demo".
其中,
–zookeeper 指定了Kafka所连接的ZooKeeper服务地址为 localhost:2181/kafka,
–topic 指定了所要创建主题的名称为 topic-demo,
–replication-factor 指定了副本因子为 1,
–partitions 指定了分区个数为 4,
–create 是创建主题的动作指令
还可以通过 --describe 展示主题更多具体信息
[root@localhost kafka_2.11-2.2.2]# bin/kafka-topics.sh --zookeeper localhost:2181/kafka --describe --topic topic-demo
Topic:topic-demo PartitionCount:4 ReplicationFactor:1 Configs:
Topic: topic-demo Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: topic-demo Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: topic-demo Partition: 2 Leader: 0 Replicas: 0 Isr: 0
Topic: topic-demo Partition: 3 Leader: 0 Replicas: 0 Isr: 0
创建消费者
首先打开一个shell终端,通过 kafka-console-consumer.sh 脚本来订阅主题 topic-demo
[root@localhost ~]cd /opt/kafka_2.11-2.2.2/
[root@localhost kafka_2.11-2.2.2]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-demo
其中,
–bootstrap-server 指定了链接的Kafka集群地址为 localhost:9092,
–topic 指定了消费者订阅的主题为 topic-demo
创建生产者
再打开一个shell终端,然后使用 kafka-console-producer.sh脚本发送一条消息“Hello,Kafka!” 至主题topic-demo
[root@localhost ~]# cd /opt/kafka_2.11-2.2.2/
[root@localhost kafka_2.11-2.2.2]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-demo
>Hello,Kafka!
>