Kafka、RocketMQ消息队列总结
侧边栏壁纸
  • 累计撰写 307 篇文章
  • 累计阅读 104.3万

Kafka、RocketMQ消息队列总结

TOTC
2018-06-16 / 912 阅读 / 正在检测是否收录...

Kafka

同一个partition内的消息只能被同一个组中的一个consumer消费,当消费者数量多于partition的数量时,多余的消费者空闲。

每个partition为一个目录,partiton命名规则为topic名称+有序序号,每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中,默认保留7天的数据。

Kafka支持以Partition为单位对Message进行冗余备份,每个Replication集合中的Partition都会选出一个唯一的Leader,所有的读写请求都由Leader处理,其他Replicas从Leader处把数据更新同步到本地。

Offset:消息在Partition中的编号,编号顺序不跨Partition。

消费失败不支持重试,组与组之间的消息是否被消费是相互隔离互不影响的。

kafka可以横向扩展,堆积能力强,当你需要进行大量数据的持久化。

kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到。

重复消费(已经消费了数据,但是offset没提交),每次消费时更新每个topic+partition位置的offset在内存中,多台服务器集群,offset要做去重处理。

消息丢失,producer同步模式(ack)、异步模式(buffer满了不清理),consumer自己手动维护偏移量。

RocketMQ

Topic分片再切分为若干等分,其中的一份就是一个Queue。

一个broker对应一组消息文件commitLog,所有topic的消息都存在commitLog中,consumerqueue保存的是消息在commitLog中的地址 。

broker主从(单Master、多Master、Master-Slave(异步复制)、Master-Slave(同步双写))。

consumer第一次默认从master节点拉取消息,未消费的数据量占物理内存的比例,当超过40%时,会返回建议的拉取节点id。

RocketMQ不保证消息不重复。

消息丢失(在各个层都可能发生),producer同步(send不报错)异步(重写回调方法),生产者返回消息状态,开启重试消费。

顺序消息,必须Producer单线程顺序发送,且发送到同一个队列,一个queue对应一个consumer,Broker重启,由于队列总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。

RocketMQ可以严格的保证消息有序。但这个顺序,不是全局顺序,只是分区(queue)顺序。要全局顺序只能一个分区,kafka是放同一个topic。

一个Queue最多只能分配给一个Consumer。

Queue是Topic在一个Broker上的分片等分为指定份数后的其中一份,是负载均衡过程中资源分配的基本单元。

消费并行度

Kafka消费并行度和分区数一致;

RocketMQ消费并行度分两种情况,顺序消费方式并行度同Kafka完全一致,乱序方式并行度取决于Consumer的线程数,如Topic配置10个队列,10台机器消费,每台机器100个线程,那么并行度为1000。

20

评论

博主关闭了所有页面的评论