Kafka 集群搭建

Kafka官网:http://kafka.apache.org

Kafka相关原理介绍,推荐一篇:https://www.jianshu.com/p/d3e963ff8b70

 

下面开始动手搭建自己的Kafka集群

搭建Kafka集群前要先搭好zookeeper,本文测试使用单点zookeeper,默认端口2181。

搭建环境:Red Hat 4.4.7-3、JDK8.0、IP:10.1.172.181

1、 下载、解压

Kafka下载地址:https://www.apache.org/dyn/closer.cgi?path=/kafka/2.1.0/kafka_2.11-2.1.0.tgz

解压到/usr/local/kafka,进入目录,结构如下:

Kafka 集群搭建_第1张图片

 

2、准备配置文件

1

2

> cp config/server.properties config/server-1.properties

> cp config/server.properties config/server-2.properties

分别修改3个配置文件的对应的配置如下

config/server.properties:
    broker.id=0
    listeners=PLAINTEXT://10.1.172.181:9092
    log.dirs=/tmp/kafka-logs-1
    zookeeper.connect=10.1.172.181:2181

config/server-1.properties:
    broker.id=1
    listeners=PLAINTEXT://10.1.172.181:9093
    log.dirs=/tmp/kafka-logs-1
    zookeeper.connect=10.1.172.181:2181

config/server-2.properties:
    broker.id=2
    listeners=PLAINTEXT://10.1.172.181:9094
    log.dirs=/tmp/kafka-logs-2
    zookeeper.connect=10.1.172.181:2181

3、分别启动3个broker

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

三个broker都连接在同一个zk集群形成Kafka集群,也意味着一套zk集群只能对应一套Kafka集群,集群中的主从由zk选举产生。

Ps: RocketMq是通过连接同一套NameSrv的broker节点通过ClusterName来形成集群的,指定broker.id,0为主,其他为从,一套NameSrv可以管理多套RocketMq集群。 

4、创建Topic

bin/kafka-topics.sh --create --zookeeper 10.1.172.181:2181 --replication-factor 3 --partitions 3 --topic my-replicated-topic4

--zookeeper 10.1.172.181:2181   指定zookeeper,也即指定在哪个kafka集群创建Topic

--replication-factor 3   指定每个Partition有3个副本

--partitions 3  指定有3个分区,一个分区只能一个客户端消费,如果需要更大的消费能力,可以调大。单物理机器分区数量不宜超过64,性能随着分区数增多而下降。阿里的一篇测试报告:http://jm.taobao.org/2016/04/07/kafka-vs-rocketmq-topic-amout/

--topic my-replicated-topic4  指定Topic名称为my-replicated-topic4

 

5、观察Topic

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic4

Topic:my-replicated-topic4	PartitionCount:3	ReplicationFactor:3	Configs:
	Topic: my-replicated-topic4	Partition: 0	Leader: 1	Replicas: 1,0,2	Isr: 2,1,0
	Topic: my-replicated-topic4	Partition: 1	Leader: 2	Replicas: 2,1,0	Isr: 2,1,0
	Topic: my-replicated-topic4	Partition: 2	Leader: 2	Replicas: 0,2,1	Isr: 2,1,0

从控制台获取的信息可以看到Topic中有3个分区,3个副本,以及每个分区对应的Leader的BrokerId,副本所在brokerId列表,以及同步中的副本brokerId列表。

  • "leader" is the node responsible for all reads and writes for the given partition. Each node will be the leader for a randomly selected portion of the partitions.
  • (leader)是分区读写节点,从节点只做热备,不参与读写。Leader是从所有partition中随机选举出来的。
  • "replicas" is the list of nodes that replicate the log for this partition regardless of whether they are the leader or even if they are currently alive.
  • (replicas)包含了Partition的所有主从节点的broker,不论副本所在broker的状态是否在线。
  • "isr" is the set of "in-sync" replicas. This is the subset of the replicas list that is currently alive and caught-up to the leader.
  • (ISR)同步中的副本,如果某个分区副本落后Leader太多数据量,将会从ISR中剔除,被剔除的节点无机会晋升为Leader。

6、修改分区数

遇到性能瓶颈时可以增加分区数如下:

bin/kafka-topics.sh --alter --zookeeper 10.1.172.181:2181 --partitions 10 --topic my-replicated-topic4

 

7、 Kafka控制台

kafka manager:由雅虎开源,地址https://github.com/yahoo/kafka-manager

 

8、对比、性能报告:

Kafka&RocketMQ可靠性对比

RocketMq&Kafka单机性能对比

NSQ vs Kafka

 

你可能感兴趣的:(MQ)