kafka 与 rocketmq
一、主从复制
服务端复制 异步复制 rocketMq不会丢消息 当出现故障时,该broker不再接收生产者消息,消费者自动切换到从节点消费 恢复后会继续同步数据到从节点 新版本使用 Dledger 的复制方式
kafka 多副本 ISR机制(ISR中维护的是与leader信息基本同步的副本) ack=all时会将leader中的消息同步到ISR列表所有节点,如果ISR列表为空 则会选择其中一个flower作为主
Kafka有一个保护策略,当一半以上的节点不可用时Kafka就会停止
kafka __consumer_offset topic对应的副本数 也可能引起可用性问题
二、消息存储
kafka:一个partition对应一个目录,该目录下有多个segment, segment使用最小offset命令,每个segment下有index文件和log文件
其中index文件为索引文件,使用稀疏索引,log为数据文件
问题:为什么分为多个segmen?
文件过大影响读写性能
kafka性能存在问题:
当kafka分区过多时就会产生多个文件,从全局来看又变为了随机读写
rocketMq:
使用kafka的模式,但是日志统一记录在 commitLog中,每个分区下记录的时日志地址
三、运维成本
kafka 各个broker直接相互协调进行主从切换,运维成本相对较高
rocketMq 引入namespace 用于协调各个节点,运维成本较低,虽然索引也有多个文件,但是量较小,磁盘的刷新频率较低
https://cloud.tencent.com/developer/article/1421267