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