文档章节

Kafka 教程(二) 集群搭建和容错性测试

MrPei
 MrPei
发布于 2018/08/16 20:46
字数 1654
阅读 75
收藏 2

在之前我们已经安装过kafka,我们直接进行单机多broker搭建。kafka安装请参考:kafka 教程(一) 第一个实例

为后续方便我们统一使用hadoop001作为本台机器的主机名,并修改hosts将主机名指向127.0.0.1

hostname hadoop001
echo hadoop001 > /proc/sys/kernel/hostname

echo 127.0.0.1 hadoop001 >> /etc/hosts

一:安装zookeeper

1.下载解压zookeeper,使用cdh5.7.0版本对应的zookeeper-3.4.5

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
tar -zxvf zookeeper-3.4.5.tar.gz

2.进入zookeeper conf目录复制一份配置文件模板zoo_sample.cfg并命名为zoo.cfg

cd zookeeper-3.4.5/conf
cp zoo_sample.cfg zoo.cfg

3.编辑配置文件

修改zookeeper数据目录为:/usr/server/tmp/zookeeper,由于我们只启动单节点的zookeeper 所以端口不需要修改。

# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/server/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.

4.启动zookeeper

cd ../bin
./zkServer.sh start

打印如下信息可以看到启动成功

JMX enabled by default
Using config: /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

使用jps或者jps -m查看

jps -m
-------------------------
12867 Jps -m
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg

至此zookeeper安装启动成功。

二:kafka集群搭建

1.进入kafka目录的config文件夹,复制并修改配置文件,这里需要修改的位置有三个:

broker.id=1

listeners=PLAINTEXT://:9093

log.dirs=/tmp/kafka-logs-1

broker.id为broker的唯一标识,使用唯一的id,修改端口号和指定不同的日志输出地址

我们创建三个broker,server.porperties文件复制三份,分别命名为:server-1.porperties,server-2.porperties,server-3.porperties

cp server.properties server-1.properties 
cp server.properties server-2.properties 
cp server.properties server-3.properties 

结果如下图所示:

2.依次编辑并修改server-1.porperties,server-2.porperties,server-3.porperties三个文件,id分别设为:1,2,3,端口分别为:9093,9094,9095,日志路径为:/usr/server/tmp/kafka/kafka-logs-1,/usr/server/tmp/kafka/kafka-logs-2,/usr/server/tmp/kafka/kafka-logs-3


# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1

############################# Socket Server Settings #############################

listeners=PLAINTEXT://:9093

# The port the socket server listens on
#port=9092

# Hostname the broker will bind to. If not set, the server will bind to all interfaces
#host.name=localhost

############################# Log Basics #############################

# A comma seperated list of directories under which to store log files
log.dirs=/usr/server/tmp/kafka/kafka-logs-1

后两个文件类似,此处不在复述。

3.分别以三份配置文件启动三个broker,实现单机多broker集群

回到kafka根目录执行如下命令

./bin/kafka-server-start.sh config/server-1.properties &
./bin/kafka-server-start.sh config/server-2.properties &
./bin/kafka-server-start.sh config/server-3.properties &

命令后加 & 表示输出启动日志到控制台以后台方式启动,也可以使用 nohup [cmd] & 完全后台运行,后台运行的方式可以参考:Linux 后台运行程序 nohup和& 的使用

执行后使用 jps -m命令查看:

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m

13219 Kafka config/server-1.properties
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13334 Kafka config/server-3.properties
13401 Jps -m
13277 Kafka config/server-2.properties

可以看到已经启动的三个broker

至此单机多broker集群配置完成,多机多集群可以参考单机多broker类似

三:容错测试

1.先创建一个topic

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic hello-mrpei

提示:

Created topic "hello-mrpei".

成功的创建了一个 名称为“hello-mrpei”的topic

下面我们查看一下这个topic的相关信息

./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei

可以看到如下信息:

Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3

topic名称  分区数为:1 副本数为:3  leader节点为:2  副本为 :2,,1,3  存活的副本:2,1,3

2.创建控制台生成者和消费者 生成和消费消息

启动一个新的终端,创建生产者producer,向hello-mrpei topic写数据

./bin/kafka-console-producer.sh --broker-list hadoop001:9093 --topic hello-mrpei

创建消费者,消费hello-mrpei topic的消息

启动一个新的终端,进入kafka目录,启动控制台消费者

./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic hello-mrpei

--from-beginning表示消费历史消息

发送可接收消息正常

发送:

接收:

3.容错测试

通过强制终止部分broker进程,查看kafka的稳定性。

首先查看当前topic的信息:

[root@hadoop001 kafka_2.11-0.9.0.0]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei
Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3

通过jps -m查看当前运行的kafka进程

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m
13649 Kafka config/server-2.properties
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13706 Kafka config/server-3.properties
14026 Jps -m
13484 Kafka config/server-1.properties

使用kill命令结束进程号为13484的broker节点1

kill -9 13484

jps -m查看到broker 1 已经结束

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m
13649 Kafka config/server-2.properties
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
14089 Jps -m
13706 Kafka config/server-3.properties
[root@hadoop001 kafka_2.11-0.9.0.0]# 

查看topic信息:

[root@hadoop001 kafka_2.11-0.9.0.0]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei
Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,3

可以看到 Isr 存活的节点为:2,3

发送消息测试

生产者:

消费者:

可以发现可以正常消费

现在我们再次结束一个broker进程,这次选择结束leader节点,即节点 2

jps -m查看进程

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m
13649 Kafka config/server-2.properties
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13706 Kafka config/server-3.properties
14124 Jps -m

结束节点 2

kill -9 13649
jps -m

------------
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
14148 Jps -m
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13706 Kafka config/server-3.properties

查看topic信息:

[root@hadoop001 kafka_2.11-0.9.0.0]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei
Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 3	Replicas: 2,1,3	Isr: 3

可以看到 Isr 存活的节点只剩下节点3,此时leader已经变为节点3,此次省去选举过程介绍。

消费测试:

生产者:

消费者:

消费仍然正常。

自此,kafka容错高可用测试结束,经过生产环境的验证kafka确实是高可用的消息中间件,今后的生产环境可以根据需要选用kafka。

© 著作权归作者所有

MrPei

MrPei

粉丝 7
博文 98
码字总数 45895
作品 0
朝阳
高级程序员
私信 提问
部署分布式kafka集群

一、kafka、zookeeper分布式集群简介 一句话概括kafka: kafka是一个具备很强容错能力和实时处理能力的分布式流数据平台。 Kafka的应用场景: kafka可在以下场景中应用:基于流数据的发布订阅...

清风与你
2017/07/25
0
0
1、Kafka快速入门秘籍:背景介绍,应用场景分析、核心架构分析

一、背景介绍 引言:其实这段背景,我们之前介绍RabbitMQ的时候,已经说过了,我们这里讲kakfa的时候,再把这一段给拿出来,再说明下。在讲实战前,我们还是有必要讲解下理论的,理论为辅,实...

极客慧
2018/11/25
199
0
2016.2.16 ActiveMQ集群负载均衡、安装、配置

一. MQ介绍 二. MQ适用场景 三. 以ActiveMQ为例,集群安装、配置、负载均衡 我们使用ZooKeeper和LevelDB搭建ActiveMQ集群,使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个...

lbnan
2016/02/16
1K
0
Kafka集群部署与示例

1 Kafka Cluster的部署   由于Kafka 集群需要依赖ZooKeeper集群,所以这里我们需要事先搭建好ZK集群(可与kafka集群分离),我这里kafka和zk并没有安在同一机器上,而是直接使用的hadoop集...

aibati2008
2016/10/14
84
0
kafka_2.11-0.11.0.1集群搭建

本文搭建一个三节点的Kafka集群。该集群有三个Zookeeper、三个Kafka Broker。 一、准备工作 解压kafka安装包,获得如下目录: Kafka目录结构: 展示如下内容: 二、搭建Zookeeper集群 将目录...

周立_itmuch
2017/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

正则表达式匹配

请实现一个函数用来匹配包括 '.' 和 '*' 的正则表达式。模式中的字符 '.' 表示任意一个字符,而 '*' 表示它前面的字符可以出现任意次(包含 0 次)。 在本题中,匹配是指字符串的所有字符匹配...

Garphy
今天
7
0
Laravel 5.1的多路由文件的配置

默认的路由配置文件只有一个, \app\Http\routes.php。 在同一个文件中写路由容易起冲突,文件会越来越大,就需要定义多个路由文件。 找到加载\app\Http\routes.php的文件, 打开\app\Provid...

mdoo
今天
5
0
Hibernate 5 开始使用指南前言

同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时。数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高。 Hibernate 是一个针对 Java 环境的对象关系映射(Obj...

honeymoose
今天
6
0
聊聊nacos ServiceManager的UpdatedServiceProcessor

序 本文主要研究一下nacos ServiceManager的UpdatedServiceProcessor ServiceManager.init nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @Compone......

go4it
今天
7
0
正则表达式的使用(QQ格式的判断与空格的切割)

//正则表达式的使用 public static void main(String[] args) throws IOException, ClassNotFoundException { //test1("123456"); test2("-1 99 kk"); } /** * ......

zhengzhixiang
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部