Kafka文字欲

无镜--kafka之TOPIC

2019-04-10  本文已影响0人  绍圣

前面在说kafka生产者的时候,经常会提到topic。这是kafka中核心的概念。说起topic就会涉及到partition,replica,zk。

简介

生产者产生的消息,会提交到对应topic对应的partition下,而此partition的leader又处于一个节点(broker)上。为了数据的可靠性,partition会有多个replica(副本),replica会处于不同的节点上,replica同时会同步主副本上的消息。

topic partition replica的关系


Topic的创建

命令创建

在kafka的安装目录下执行kafka-topics.sh

./bin/kafka-topics.sh --create --topic test --zookeeper XXXX --partitions 3 --replication-factor 2

以上语句创建:topic名称为test,partition为3,replica为2的一个kafka消息队列。

Producer创建topic

服务端的配置文件中设置的auto.create.topics.enable为true,Producer向服务器一个不存在的topic发送数据,该topic会被自动创建。

Partition的replica是如何分配的

创建时指定replica分配

./bin/kafka-topics.sh --create --topic test --zookeeper XXXX --replica-assignment 1:2,3:4,5:6

test的topic有三个partition,其中partition_0的replica分布在broker1和2上,partition_1的replica分布在broker3和4上,partition_2的replica分布在broker5和6上。

replica自动分配

replica分配的原则:

1,将副本平均分布在所有的broker上。

2,partition的多个副本分配在不同的broker上。

3,如果broker是机架信息的话,partition的多个副本应该分配到不同的机架上。

机架感知:kafka在0.10时引入了机架感知,如果在集群很大的情况下,所有的replica都在同一个机架上,那么一旦此机架出问题,那么所有的replica都将失效(当然这种情况非常少)。现在kafka可以让replica分布到不同的机架上,提高了整个集群的稳定性和可用性。所以如果指定了机架信息,那么kafka在分配replica的时候,就会尽可能的为partition的多个副本分配不同的机架的broker。

在不考虑机架的情况下,分配原则是:

1,从broker列表中随机选择一个broker,使用round-robin轮询算法分配每一个partition的第一个副本。

2,对剩下的partition的副本,采用逐渐增加broker.id来选择出broker来分配给replica

服务端会将replica分布直接更新到zk上。这样监控此ZK目录变化的方法会被触发:

1,获取zk的topic变更信息,得到新的topic列表以及被删除的topic列表。

2,将被删除的topic列表的replicas从kafkaController的缓存中删除,将新增的topic的replicas增加到kafkaController的缓存中。

3,调用kafkaController的onNewTopicCreation()方法创建partition和replica对象。

当partition和replica都是上线状态后(这里涉及到partition和replica的状态机变化,后面重点分析kafkaController的时候,来详细分析一下),此topic就创建好了。

参考:

Kafka 源码解析之 topic 创建过程(三) | Matt's Blog

上一篇下一篇

猜你喜欢

热点阅读