Skip to content

Commit 999bcee

Browse files
添加STL底层实现说明
1 parent bc6f42c commit 999bcee

8 files changed

+90
-5
lines changed

Linux/linux_command.adoc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,20 @@ ls /sys/class/net/<interfaces>/queues
7575

7676

7777

78+
=== 网络命令
79+
80+
==== netstat
81+
82+
==== lsof
83+
84+
- 查看文件是哪个进程打开的
85+
86+
lsof filename
87+
88+
- 查看端口是哪个进程打开的
89+
90+
lsof -i :22
91+
7892

7993

8094

MQ/RocketMQ.adoc

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,74 @@ image::mq/image-2024-09-26-14-19-34-857.png[]
6767

6868
但是zookeeper作为一个通用的分布式协调服务,它不仅可以用于服务注册和发现,还可以用于分布式锁、配置管理等场景,kafka其实只是用到了部分功能,对于整个系统来说就好比杀鸡用牛刀,太重了。
6969

70-
所以在RocketMQ中直接将zookeeper去掉,换成了nameserver,是一种更加轻量式,管理消息队列的集群消息,生产者通过nameserver获取得到topic和broker的路由信息
70+
所以在RocketMQ中直接将zookeeper去掉,换成了nameserver,是一种更加轻量式,管理消息队列的集群消息,生产者通过nameserver获取得到topic和broker的路由信息,然后与各个Broker进行通讯,实现服务发现和负载均衡的效果。
71+
72+
image::mq/image-2024-10-27-21-06-26-168.png[]
73+
74+
当然开发kafka的大佬们也意识到了zookeeper过重的问题,所以从2.8.0版本就支持将zookeeper移出,通过broker之间添加一致性算法raft实现同样的效果,也就是所谓的kRaft或Quorum模式。
75+
76+
image::mq/image-2024-10-27-21-11-38-731.png[]
77+
78+
我们知道kafka将topic拆分成多个partition用来提升并发性能,在RocketMq中也将主题拆分成了多个分区,但是换了个名字,叫Queue也就是队列。
79+
80+
image::mq/image-2024-10-27-21-14-36-324.png[]
81+
82+
kafka中的Partition会存储完整的消息体,而RocketMQ中的Queue上却只存储了一些简要的信息,比如消息偏移量offset,而完整的消息数据存储在一个叫做 `commitlog` 的文件上,我们通过offset可以定位到commitlog上的某条消息。
83+
84+
kafka的消费消息,broker只需要从partition读取消息返回就好了,也就是读取依次就够了。
85+
86+
image::mq/image-2024-10-27-21-21-26-132.png[]
87+
88+
但是在RocketMQ中,broker则需要从queue上读取offset信息的值,再跑到commitlog上将完整的数据读取出来,也就是需要读取两次。
89+
90+
image::mq/image-2024-10-27-21-29-51-426.png[]
91+
92+
那么问题来了,看起来kafka的设计更加高效,为什么RocketMq不采用kafka的设计?
93+
94+
那么就不得不说一下说kafka的底层存储了
95+
96+
97+
98+
99+
100+
101+
102+
103+
104+
105+
106+
107+
108+
109+
110+
111+
112+
113+
114+
115+
116+
117+
118+
119+
120+
121+
122+
123+
124+
125+
126+
127+
128+
129+
130+
131+
132+
133+
134+
135+
136+
137+
71138

72139

73140

239 KB
Loading
239 KB
Loading
89.5 KB
Loading
70.8 KB
Loading
185 KB
Loading

src/main.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,16 @@ using namespace std;
3030
int main() {
3131

3232

33-
std::this_thread::sleep_for(std::chrono::seconds(18));
34-
35-
36-
33+
std::set<int> setAlices{1};
34+
std::set<int> setAlices2{2};
35+
std::set<int> setRet{};
3736

37+
std::set_difference(setAlices2.begin(), setAlices2.end(),
38+
setAlices.begin(), setAlices.end(), std::inserter(setRet, setRet.begin()));
3839

40+
for (const auto& index : setRet) {
41+
std::cout << index << std::endl;
42+
}
3943

4044

4145

0 commit comments

Comments
 (0)