当前位置:   article > 正文

消息队列(Kafka、RocketMQ)_mq队列对应kafka

mq队列对应kafka

消息模型:

RocketMQ消息模型:在这里插入图片描述

Kafka:RocketMQ中的队列(queue)对应Kafka中的分区(Partition),其他两者的消息模型一致

事务消息(提交事务失败处理方案):

Kafka:抛出异常,重试
RocketMQ:通过接口反查事务状态
  • 1
  • 2

保证消息可靠性:

生产阶段:消息从producer端生产出来发送到broker端。采用请求确认机制,正确处理返回值或捕获异常
存储阶段:消息在broker端存储。数据写入磁盘成功再相应,如果是集群的话,节点刷盘成功数过半通过
消费阶段:消息从broker端到consumer端。采用请求确认机制,业务逻辑完成后再发送消费确认
  • 1
  • 2
  • 3

重复消息处理:

1、利用数据库的唯一索引
2、给更新的数据设置前置条件
3、记录并检查
  • 1
  • 2
  • 3

消息堆积处理:

1、发送变快:
	增加消费端的实例,系统降级关闭一些不重要的业务
2、消费变慢:
	排查变慢原因,消费失败导致一条消息反复消费的情况变多,消费线程是不是阻塞住了
  • 1
  • 2
  • 3
  • 4

保证消息有序性:

主题层面是没法保证消息有序性的,只有在分区(队列)上才能保证有序性
如果是全局有序性,可以配置成一个队列一个生产者一个消费者
如果是局部有序性,可以取一个key,用一致性哈希算法计算出队列编号,保证相同的key发送到同一个队列上
  • 1
  • 2
  • 3

高性能的网络传输:

通过NIO,多路复用实现高吞吐
  • 1

序列化和反序列化:

将结构化数据转换成字节流的过程就称为序列化,反过来转换称为反序列化
选择序列化需要衡量的几个因素:
	序列化后的数据最后是易于阅读的
	实现的复杂度是否足够低
	序列化和反序列化的速度越快越好
	序列化后的信息密度越大越好,也就是序列化后占用的存储空间越小越好
JSON -- Kryo -- 专用的序列化
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Kafka如何实现高性能IO

1、producer发送消息的时候,kafka不会马上将消息发送出去,而是会在内存缓存起来,等合适的时机再将缓存中的消息组成一批发送给broker,
	在写入磁盘、读取消息、集群复制到副本这些操作中不会将“批消息”解开,而是作为一条“批消息”进行处理的。
2、顺序读写
3、PageCache 加速消息读写
4、ZeroCopy 零拷贝
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/970770
推荐阅读
相关标签
  

闽ICP备14008679号