目录

topic主题-partition分区-broker节点的关系

Kafka核心相关名称

集群图 

zk目录结构:

创建qi-topic-2主题语句分析(主题、分区、副本):

Kafka集群环境搭建

Zookeeper集群环境

Kafka集群原理

Kafka集群环境测试


首先kafka是去中心化的,所以依赖zk来管理节点状态(brokerID注册、topic注册、生产者负载均衡、消费者负载均衡、故障转移)。


topic主题-partition分区-broker节点的关系

   一个topic可对应多个partition,partition可指定多个副本,partition分布在多broker上(一个broker可以多个partition),多broker一起提供kafka服务。

副本:在kafka中,每个主题可以有多个分区,每个分区又可以有多个副本。这多个副本中,只有一个是leader,而其他的都是follower副本。仅有leader副本可以对外提供服务

多个follower副本通常存放在和leader副本不同的broker中。通过这样的机制实现了高可用,当某台机器挂掉后,其他follower副本也能迅速”转正“,开始对外提供服务。

3节点的kafka集群能支撑多少吞吐量_zookeeper

Kafka核心相关名称

Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群

Partition:对topic进行分区,partition设为几就表示该下的topic在几个Broker节点上存在(集群,非集群的话设为1)。

                  一个topic可以分为多个partition分区(broker),每个partition是一个有序的队列,

分区数可以大于节点数,但是副本数不能大于节点数量!(因为副本提供高可用,当主宕机后替代主提供服务,副本存放在不同节点中,所以副本数大于节点数量没意义)

Topic:一类消息,消息存放的目录即主题,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发

Consumer Group:消费者组,一个消费者组包含多个消费者

同一组的消费者订阅的相同队列,只有一个消费者会消费消息(一对一,可以避免消费者集群多次消费)!!!

不同组的消费者订阅的队列,都会收到消息(一对多)!!!

  massage: Kafka中最基本的传递对象。

  Segment:partition物理上由多个segment组成,每个Segment存着message信息

  Producer : 生产者,生产message发送到topic

  Consumer : 消费者,订阅topic并消费message, consumer作为一个线程来消费

  Offset:偏移量,理解为消息在partition分区中的索引位置即可;

   -  offset指向了分区中的消息位置(索引),消费者组通过offset索引获取一次消息则offset+1,

   -  每一个消费者组都有自己的offset(消息索引),保证消费组可以拿到自己的数据

   -  消费者组commit后,offset+1;保证不会取到相同消息。

 topic-分区-副本:每个主题可以有多个分区,每个分区又可以有多个副本。这多个副本中,只有一个是leader,而其他的都是follower追随者副本。仅有leader副本可以对外提供服务;

                            多个follower副本通常存放在和leader副本不同的broker中。通过这样的机制实现了高可用,当某台机器挂掉后,其他follower副本也能迅速”转正“,开始对外提供服务。

集群图 

默认负载均衡机制存储消息,所以每个MQ节点上的数据都不一样。

3节点的kafka集群能支撑多少吞吐量_kafka集群_02


3节点的kafka集群能支撑多少吞吐量_zookeeper_03

zk目录结构:

集群有两个kafka节点:

3节点的kafka集群能支撑多少吞吐量_kafka集群_04

3节点的kafka集群能支撑多少吞吐量_kafka_05

创建qi-topic-2主题语句分析(主题、分区、副本):

“kafka-topics.sh --create --zookeeper localhost:2181 --partitions 2 --replication-factor 1 --topicqi-topic-2

# --topic qi-topic-2 (创建名为qi-topic-2的主题)

# --partitions 2 (创建2个分区)

# --replication-factor 1 (每个分区创建1个副本,注意:最少为1个副本,因为是主副本对外提供的读写请求!!!)

一个分区可有N个副本,N个副本中只能有一个是主副本,其余都为从副本,其中只有主副本对外提供读写服务,从副本只为了高可用故障转移,主副本宕机后副副本晋升为主。


分到不同的kafka节点上,对qi-topic-2主题发送数据会均摊到不同的节点机器的zk上。

3节点的kafka集群能支撑多少吞吐量_3节点的kafka集群能支撑多少吞吐量_06

Kafka集群环境搭建

Zookeeper集群环境

  1. 解压安装包

tar -zxvf zookeeper-3.4.10.tar.gz

  1. 重新命名

mv zookeeper-3.4.10 zookeeper

cd /usr/local/zookeeper/conf

mv zoo_sample.cfg zoo.cfg

修改conf: vi zoo.cfg 修改两处
(1) dataDir=/usr/kafka/zookeeper/data(注意同时在zookeeper创建data目录)
(2)最后面添加
server.0=192.168.212.174:2888:3888
server.1=192.168.212.175:2888:3888
server.2=192.168.212.176:2888:3888

每台zk服务器节点,创建服务器标识

创建文件夹: mkdir data
创建文件myid并填写内容为0: vi
myid (内容为服务器标识 : 0)

关闭每台服务器节点防火墙,systemctl stop firewalld.service

启动Zookeeper

启动zookeeper:
路径: /usr/local/zookeeper/bin
执行: zkServer.sh start
(注意这里3台机器都要进行启动)
状态: zkServer.sh status(在三个节点上检验zk的mode,一个leader和俩个follower)

Kafka集群原理

tar -zxvf kafka_2.11-1.0.0.tgz

mv kafka_2.12-0.11.0.0 kafka

vi ./kafka/config/server.properties

broker.id=0

listeners=PLAINTEXT://192.168.131.130:9092

zookeeper.connect=192.168.212.164:2181,192.168.212.167:2181,192.168.212.168:2181

其他两台只需要修改server.properties中的broker.id分别为 1 ,2

Kafka集群环境测试

1、开启3台虚拟机的zookeeper程序

/usr/local/zookeeper/bin/zkServer.sh start

开启成功后查看zookeeper集群的状态

/usr/local/zookeeper/bin/zkServer.sh status

出现Mode:follower或是Mode:leader则代表成功

2、在后台开启3台虚拟机的kafka程序(cd /usr/local/kafka)

./bin/kafka-server-start.sh -daemon config/server.properties

3、在其中一台虚拟机(192.168.131.130)创建topic

/usr/local/kafka/bin/kafka-topics.sh --create –zookeeper 192.168.212.131:2181 –replication-factor 3 –partitions 1 –topic my-replicated-topic

// 查看创建的topic信息

/usr/local/kafka/bin/kafka-topics.sh –describe –zookeeper 192.168.212.132:2181 –topic my-replicated-topic