关于kafka:Kafka-元数据的拉取时机

6次阅读

共计 1146 个字符,预计需要花费 3 分钟才能阅读完成。

元数据

生产者发消息给 Kafka,是须要晓得 Kafka 的 ip、端口等节点信息,这些节点信息是元数据的一部分,属于元数据 Metadata 的 Cluster 的一部分。

咱们每一个 topic,在 Kafka 是分布式的模式寄存的,所以一个 topic 就会有多个分区,每个分区对应值着不同的 ip、端口等信息。所以每个 topic 有多少分分区,每个分区的 leader 节点 replica 节点的 ip、端口信息等,也属于元数据 Metadata 的 Cluster 的一部分。

对于生产者客户端来说,这些元数据都是 Kafka 的信息,所以往 kafka 发送音讯之前,就须要拉取元数据。

初始化

Metadata 是 KafkaProducer 的一个属性,在 KafkaProducer 初始化的时候,也会实例化一个 Metadata 对象,可能有人感觉,实例化 Metadata 后,就会去拉取元数据信息。

然而 kafka 并没有这么做,只是对集群元数据做了一个初始化,咱们在上一篇曾经晓得 KafkaProducer 是有配置 bootstrap.servers 这个属性的。所以初始化的时候,就是把配置的地址,转换为 Node,Node 就存储着配置的 ip 和 port,放在 Cluster 对象实例里,下面曾经说过,Cluster 对象也是 Metadata 的属性。因为 bootstrap.servers 是能够配置多个的,所以在 Cluster 中存储的是 Node 列表。

所以 KafkaProducer 初始化的时候并没有加载元数据的,这是懒加载的编程思维。

发送时

在元数据里,咱们曾经看到 Metadata 的 cluster 寄存 topic 相干的信息,如果发送的时候,发现这个 topic 在 cluster 中并没有对应的信息,那就须要去拉取元数据信息。

默认状况下,咱们只拉取本人要发送音讯的对应的 topic 的元数据的信息,并不会拉取所有的元数据信息,所以在初始化的时候,并不会拉取元数据,因为那时候,基本不晓得生产者须要发送哪些 topic。

等到下一次往这个 topic 发送数据的时候,间接就会从 Metadata 的 cluster 中拿数据。

某个机会

Metadata 在实例化的时候,会有两个结构参数,一个读取配置 config 里的 metadata.max.age.ms 信息,默认是 5 分钟,这个作用是,间隔上次胜利拉取的工夫超过 5 分钟会刷新一下。

另外一个参数读取配置 config 里的 retry.backoff.ms 信息,默认 100ms,这个作用是,间隔上一次更新元数据的工夫跟以后工夫比照,如果还没有到 100ms,那就不能更新元数据,防止频繁更新。留神这里只是和上次更新的工夫比拟,并不是胜利拉取的工夫。

如果有一个拉取元数据的工作了,那就不能持续去拉取元数据。

对于能不能拉取元数据,次要还是看下面三种状况。

正文完
 0