1

概述

KafkaProducer运行过程中需要用到集群元信息,这部分信息存在Cluster中

Node,TopicPartition和PartitionInfo

Cluster集群元信息由三种类型的对象组合Node, TopicPartition, PartitionInfo
Cluster类图

Immutability模式

仔细阅读源码可见,三种类内部成员变量都声明为final变量,这里用了一种Immutability的并发设计模式
Immutability的并发设计模式:对象一旦被创建之后,状态就不发生变化了,即成员变量不能修改,用不可变来代替加锁(因为不可变所以无需加锁),从而解决多线程下的并发问题。

Immutability模式的实现

将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。更严格的做法是这个类本身也是 final 的,也就是不允许继承。因为子类可以覆盖父类的方法,有可能改变不可变性,所以推荐你在实际工作中,使用这种更严格的做法。

实现不可变模式快速总结

  1. final类
  2. final属性
  3. 方法只读

思考

  1. PartitionInfo类能保证不可变么?

Immutability模式扩展【文章引用】

Immutability模式扩展


hello123
5 声望1 粉丝