概述
KafkaProducer 运行过程中需要用到集群元信息,这部分信息存在 Cluster 中
Node,TopicPartition 和 PartitionInfo
Cluster 集群元信息由三种类型的对象组合Node, TopicPartition, PartitionInfo
- Node 源码
- TopicPartition 源码
- PartitionInfo 源码
Immutability 模式
仔细阅读源码可见,三种类内部成员变量都声明为 final 变量,这里用了一种 Immutability 的并发设计模式
Immutability 的并发设计模式: 对象一旦被创建之后,状态就不发生变化了,即成员变量不能修改,用不可变来代替加锁(因为不可变所以无需加锁),从而解决多线程下的并发问题。
Immutability 模式的实现
将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。更严格的做法是这个类本身也是 final 的,也就是不允许继承。因为子类可以覆盖父类的方法,有可能改变不可变性,所以推荐你在实际工作中,使用这种更严格的做法。
实现不可变模式快速总结
- final 类
- final 属性
- 方法只读
思考
- PartitionInfo类能保证不可变么?
Immutability 模式扩展【文章引用】
Immutability 模式扩展