Kafka 元数据管理

1、

MetaData:
    //两个更新元数据的请求的最小的时间间隔,默认值是100ms
    //目的就是减少网络的压力
    private final long refreshBackoffMs;

    //多久自动更新一次元数据,默认值是5分钟更新一次。
    private final long metadataExpireMs;

    //对于producer端来讲,元数据是有版本号
    //每次更新元数据,都会修改一下这个版本号。
    private int version;

    //上一次更新元数据的时间。
    private long lastRefreshMs;

    //上一次成功更新元数据的时间。
    //如果正常情况下,如果每次都是更新成功的,那么lastRefreshMs和lastSuccessfulRefreshMs 应该是相同的。
    private long lastSuccessfulRefreshMs;

    //TODO Kafka集群本身的元数据。
    private Cluster cluster;

    //这是一个标识,用来判断是否更新元数据的标识之一。
    private boolean needUpdate;

    /* Topics with expiry time */
    //记录了当前已有的topics
    private final Map<String, Long> topics;
    private final List<Listener> listeners;
    private final ClusterResourceListeners clusterResourceListeners;
    private boolean needMetadataForAllTopics;
    private final boolean topicExpiryEnabled;

Cluster:
    private final boolean isBootstrapConfigured;
    //我们一个kafka集群是有多个节点,这个参数代表的就是kafka的服务器的信息。
    private final List<Node> nodes;
    //没有授权的topic
    private final Set<String> unauthorizedTopics;
    private final Set<String> internalTopics;

    /**
     * 我们发现这儿搞了很多数据结构,这些数据结构里面有些数据可能是冗余的。
     */

    //代表的是一个partition和partition对应的信息
    //是因为partition有副本
    private final Map<TopicPartition, PartitionInfo> partitionsByTopicPartition;
    //一个topic 对应哪些分区
    private final Map<String, List<PartitionInfo>> partitionsByTopic;
    //一个topic对应哪些可用partition
    private final Map<String, List<PartitionInfo>> availablePartitionsByTopic;
    //一台服务器上面有哪些partition(服务器用的是服务器的编号)
    private final Map<Integer, List<PartitionInfo>> partitionsByNode;
    //服务器编号和服务器对应的关系
    //0,Node
    private final Map<Integer, Node> nodesById;
    //kafka集群的id信息(不重要)
    private final ClusterResource clusterResource;
    
/**
 * 代表的就是kafka的一个节点信息
 */
public class Node {
    
    

    private static final Node NO_NODE = new Node(-1, "", -1);
    //id 编号,这个编号是我们配置参数的时候指定的。
    private final int id;
    private final String idString;
    //主机名
    private final String host;
    //端口号,默认是9092
    private final int port;
    //机架
    private final String rack;

public class PartitionInfo {
    
    
    //主题
    private final String topic;
    //分区编号
    private final int partition;
    //leader partition 在哪台服务器上面
    private final Node leader;
    //这个分区的所有的replica都在哪些节点上面
    private final Node[] replicas;
    //ISR列表。
    private final Node[] inSyncReplicas;

public final class TopicPartition implements Serializable {
    
    

    private int hash = 0;
    private final int partition;
    private final String topic;

猜你喜欢

转载自blog.csdn.net/m0_46449152/article/details/114850263