Kafka和其它中间件共同的优化(五)

news/2025/1/25 12:33:26/

五、其它中间件共同的优化

5.1 双写或多写来保证数据一致性

ISR默认值为1,ISR像不像数据库双写。

5.2 reactor模型

netty也有使用到, 以及它所用的mmap, epoll

5.3 和rocketMQ相同点

相同点

两者均利用了操作系统Page Cache的机制,同时尽可能通过顺序io降低读写的随机性,将读写集中在很小的范围内。均使用零拷贝和epoll等

不同点

存储

  1. Kafka采用partition,每个topic的每个partition对应一个文件。顺序写入,定时刷盘。但一旦单个broker的partition过多,则顺序写将退化为随机写,Page Cache脏页过多,频繁触发缺页中断,性能大幅下降。
  2. RocketMQ采用CommitLog+ConsumeQueue,单个broker所有topic在CommitLog中顺序写,Page Cache只需保持最新的页面即可。同时每个topic下的每个queue都有一个对应的ConsumeQueue文件作为索引。ConsumeQueue占用Page Cache极少,刷盘影响较小。

存储可靠性

  • RocketMQ支持异步刷盘,同步刷盘,同步Replication,异步Replication。
  • Kafka使用异步刷盘,异步Replication。

顺序消息

  • Kafka和RocketMQ都仅支持单topic分区有序。
  • RocketMQ官方虽宣称支持严格有序,但方式为使用单个分区。

延时消息

  • RocketMQ支持固定延时等级的延时消息,等级可配置。
  • kfaka不支持延时消息。

消息重复

  • RocketMQ仅支持At Least Once。
  • Kafka支持At Least Once、Exactly Once。

消息过滤

  • RocketMQ执行过滤是在Broker端,支持tag过滤及自定义过滤逻辑。
  • Kafka不支持Broker端的消息过滤,需要在消费端自定义实现。

死信队列DLQ(dead letter queue)

  • RocketMQ通过DLQ来记录所有消费失败的消息。
  • Kafka无DLQ。Spring等第三方工具有实现,方式为将失败消息写入一个专门的topic。

回溯消费

  • RocketMQ支持按照时间回溯消费,实现原理与Kafka相同。
  • Kafka需要先根据时间戳找到offset,然后从offset开始消费。

事务

  • RocketMQ支持事务消息,采用二阶段提交+broker定时回查。但也只能保证生产者与broker的一致性,broker与消费者之间只能单向重试。即保证的是最终一致性。
  • Kafka从0.11版本开始支持事务消息,除支持最终一致性外,还实现了消息Exactly Once语义(单个partition)。

转载请注明:arthur.dy.lee_Kafka和其它中间件共同的优化(五)


http://www.ppmy.cn/news/60595.html

相关文章

千模大战鏖战正酣,大模型能否帮360重回巅峰?

ChatGPT问世后,互联网终于看到了变革的曙光。 回望互联网的征程,几乎每十年左右,就会因产品和技术的变革,而催生出全新的应用场景。 00年代,随着PC产品的逐渐成熟,桌面互联网成为时代的“主旋律”。在此背…

【Linux0.11代码分析】04 之 head.s 启动流程

【Linux0.11代码分析】04 之 head.s 启动流程 一、boot/head.s 系列文章如下: 系列文章汇总:《【Linux0.11代码分析】之 系列文章链接汇总(全)》 . 1.《【Linux0.11代码分析】01 之 代码目录分析》 2.《【Linux0.11代码分析】02 之…

【DP】学习之背包问题

01背包 2. 01背包问题 - AcWing题库 记忆化搜索 #include<bits/stdc.h> using namespace std; const int N1e310; int n,m; int v[N],w[N]; int res; int mem[N][N]; int dfs(int x,int spv) {if(mem[x][spv]) return mem[x][spv];if(x>n) return mem[x][spv]0;if…

[创新工具和方法论]-02- DOE实验设计步骤

文章目录 1.DOE设计1.1 基于OFAT的传统实验设计&#xff1a;1.2 基于DoE的现代实验设计&#xff1a;1.3 DOE和OFAT的比较1.4 如何利用好DOE1.4.1 规划1.4.2 筛选1.4.3 表征1.4.4 优化1.4.5 确认 2. 步骤2.1陈述实际的问题和实验的目的2.2因果链分析,提取重要的因子2.3选择Y的响…

网络基础设施 拥塞控制

我经常说&#xff0c;传统的 TCP 优化已经到顶&#xff0c;不会有大意义了&#xff0c;这有两方面意思。 一方面&#xff0c;内在的&#xff0c;TCP 的 ACK 时钟带回的信息就那么多&#xff0c;用足了又能怎样。一个学习最差的差生能控制的分数是是 0&#xff5e;100 分的区间…

Linux运维之shell基础

一.流程控制 1.if判断 基本语法&#xff1a; if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 else 程序 fi注意事项&#xff1a; ①[ 条件判断式 ]&#xff0c;中括号和条件判断式之间必须有空格②if 后要有空格 例如&#xff0c;现在写一个if.sh脚本文件 #…

hbase查询报错unable to find region for

某天由于集群资源不足。hbase大面积 region server 负载爆炸卡死&#xff0c;隔天发现部分查询报错 集群中一张表某些查询找不到region 尝试了重启集群和滚动重启集群&#xff0c;考虑滚动重启的过程会把regionserver上的region迁出和迁入。试试能不能修复&#xff0c;果断的…

Linux一学就会——编写自己的shell

编写自己的shell 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行…