KAFKA 和 RocketMQ 的不同点

 KafkaRocketMQ备注
编程语言ScalarJava 
底层通信模块JDK NIONetty 
组件间通信用自定义基于TCP的二进制协议组件间通信用自定义RemotingCommand协议 
服务管理zookeeperNameserver

Nameserver 组件相关数据都放在内存中(kafka存储在磁盘中),无选举机制,Master挂了,只能手动吧 Slave转换成Master

 

Nameserver  各个实例之间无交互,其他角色同时向多个实例发状态信息

概念Brocker代表一个服务器的物理机Brocker是一个逻辑概念,Master Slave代表物理机 
PartitionMessageQueue

读队列数量和写队列数量可以不一致:当我们使用updateTopic命令创建topic时,会发现新建的topic下会有默认的8个写对列和8个读对列(依赖于配置),并且读队列的数量和写队列的数量还可以不一致,这是为什么呢?难道在底层读写队列是在物理上分离的吗?抱着这个问题,我分析了相关的源代码,发现底层代码对于读写队列指的都是同一个队列,其中写队列的数量是针对的producer,读队列的数量针对的是consumer:

           a.假设写队列有8个、读队列有4个,那么producer产生的消息会按轮训的方式写入到8个队列中,但是consumer却只能消费前4个队列,只有把读队列重新设置为8后,consumer可以继续消费后4个队列的历史消息;

           b.假设写队列有4个、读队列有8个,那么producer产生的消息会按轮训的方式写入到4个队列中,但是consumer却能消费8个队列,只是后4个队列没有消息可以消费罢了。

数据读写异步刷盘同步/异步刷盘 
 异步复制同步/异步复制 
 Partition leader负责读写,Partition Slave只负责同步Master负责读写,Slave只能读如果RocketMQ一个topic只有一个Master,这个Master挂掉后,消息不能够写到服务器
数据存储topic_patition 文件夹,每个数据文件 对应一个index文件

commitlog:所有topic数据都存入一个commitlog文件中,文件最大1G,追加写

comsumequeue:commitlog的索引,主要存messagequeue 对应的 offset,供commumer消费使用

indexfile:索引文件 可以通过key查找到所有包含这个key的message,主要用于数据搜索

 
producer发送数据方式同步/异步同步/异步/oneway 
消费模式

多个Consumer放在同一个Group(集群)

多个Consumer每一个放单独的Group(广播)

Consumer都放到一个Group里面,通过设置参数来确定是 广播 还是集群模式 
 pull模式push/pull 模式RocketMQ push 实际是轮询的pull
Consumer Offset 提交策略

1、自动提交(poll()方法中提交,判断距上次提交是否超过5s,超过就提交,提交最新获取到的offset。所以部分数据可能还没有消费)

2、手动提交(参数可指定分区和特定offset)

(1)同步提交

(2)异步提交

 
Rebalance机制Consumer Leader 统一计算好后,发给服务器,然后服务器再下发给所有Consumer每一个Consumer单独计算,彼此不知道对方的计算结果RocketMQ在某些特殊情况下(Master挂掉的同事,Comsumer有变动) 会出现 一个MessageQueue被多个Comsumer消费的情况
Rebalance策略

1、Range(默认)(每个topic单独计算,如果订阅的topic比较多,会造成比较严重的分配不均)

2、RoundRobin:消费组内所有消费者以及消费者所订阅的所有topic拉通全量计算,可以解决以上问题

  • AllocateMessageQueueAveragely:平均分配(默认)

  • AllocateMessageQueueAveragelyByCircle:循环分配

  • AllocateMessageQueueConsistentHash:一致性哈希

  • AllocateMessageQueueByConfig:根据配置进行分配

  • AllocateMessageQueueByMachineRoom:根据机房

  • AllocateMachineRoomNearby:就近分配

 
数据可靠性

某些情况下能实现

Exactly Once

只能实现

at least Once

kafka:producer在同一个会话中 会有seq number计数,来保证发送端的幂等性。

RocketMQ在producer发送不成功后有重试,可能发送重复数据

 

标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的据,并通过其内置的字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计三轴陀螺仪的六自由度传感器,广泛应用于运动控制姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计陀螺仪的据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行据线控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出据的中断;之后是据读取,通过中断服务程序从DMP接收姿态角据,据通常以四元或欧拉角形式呈现;再接着是据显示,将姿态角据转换为可读的度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值