乐趣区

kafka源码解析1KafkaProducer-Cluster集群信息

概述

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

Node,TopicPartition 和 PartitionInfo

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

  • Node 源码
  • TopicPartition 源码
  • PartitionInfo 源码

Immutability 模式

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

Immutability 模式的实现

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

实现不可变模式快速总结

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

思考

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

Immutability 模式扩展【文章引用】

Immutability 模式扩展

退出移动版