摘要:
dubbo 通过 SPI + ExtensionLoader 实现了一种比较灵活的定制开发的方式,SPI 即配置文件,文件名为接口类的全名,内容为 "key=接口实现类的全名",而 ExtensionLoader 是一个类似于 spring 的容器,在 dubbo 项目中需要获取一个类的实例时,直接 阅读全文
摘要:
很长一段时间没有关注 nacos 了,今天看了下代码,发现其已经使用 grpc 替换了 http。 抽象出 com.alibaba.nacos.core.remote.RequestHandler,用来处理 grpc 的请求。 以 ConfigQueryRequestHandler 为例,它是一个查 阅读全文
摘要:
1. git clone 代码 2. 这个项目比较挑 jdk 版本,好像只支持 jdk8 3. 把注释掉的配置文件,解放出来 4. 启动本地 zk 5. 启动 org.apache.shardingsphere.proxy.Bootstrap 阅读全文
摘要:
按照我看源码的进度,条件 condition 是 aqs 的最后一块拼图。 我总结的 aqs 三要素:stateownerThread等待队列 这里没有考虑到 condition,condition 的用法如下 lock.lock(); condition.await(t); lock.unlock 阅读全文
摘要:
KafkaController 需要处理各种各样的事件,事件统一投递到队列里面,由一个线程进行消费。 // kafka.controller.ControllerEventManager private val putLock = new ReentrantLock() // 存放事件的队列 pri 阅读全文
摘要:
场景: 3 节点集群 (b1, b2, b3),分区 tp1 的 isr[1, 2, 3],leader 是 1,现在希望把 tp1 的 leader 切换为 3,怎么操作? 1. 通过 zk 客户端,修改 zk 上 tp1 的 isr 列表为 [3, 2, 1] 2. 执行命令行 kafka-pr 阅读全文
摘要:
kafka 非常难,难在 broker 有角色之分,controller 起控制作用,难在副本有角色之分,leader 提供读写服务,所以 broker 会有状态的切换,副本也有状态的切换。 从一个具体的场景切入,4 节点集群(b1, b2, b3, b4),存在 1 个分区 tp0 分布在 (b1 阅读全文
摘要:
通常使用 ReentrantLock.tryLock 的时候,都会带上一个时间戳,如果到了时间仍然没获取锁返回 false。 不带时间戳,当前线程只会尝试获取一次锁,然后返回结果;带上时间戳,则当前线程在等待时间内会多次尝试获取锁。 这里面细节还挺多,在等待时间内,线程是否会挂起? 如果挂起,是怎么 阅读全文
摘要:
每一个副本 leader 管理自己的 isr 列表,进行扩缩,并写入 zk 把某些 replica 加入到 isr 中:如果 follower 的 offset 大于等于 leader 的 HW,则把该 replica 加入到 isr 中 // kafka.cluster.Partition#may 阅读全文
摘要:
producer 发送数据到 broker,如果 producer 端设置 acks = -1,同时 broker 侧配置 min.insync.replicas = 2,这时 broker 会创建 DelayedProduce,leader broker 会等待消息复制到其他副本中,或者超时后返回 阅读全文