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,进入目录,结构如下:
2、准备配置文件
1 2 |
|
分别修改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、对比、性能报告: