[logseq-plugin-git:commit] 2025-06-18T11:30:33.248Z

This commit is contained in:
2025-06-18 19:30:33 +08:00
parent 20495d8e2f
commit ad2dae61f4
4 changed files with 100 additions and 2 deletions

View File

@@ -1,2 +1,3 @@
- [[长时间阅读就是大脑的马拉松]]
- [[ShardingSphere]]
- [[ShardingSphere]]
- [[消息队列]]
- [[Netty]]

30
pages/Kafka.md Normal file
View File

@@ -0,0 +1,30 @@
- 高吞吐量每秒10几万
- 高扩展性
- 持久性
- 容错性
- 高并发
- 为什么快?
- 顺序写入磁盘,减少磁盘寻址
- 支持批量发送消息,积累到一定量再发送,减少网络开销
- 零拷贝,直接从磁盘发送到网络套接字
- 支持对消息压缩
- pull模型
- 消费者自己记录消费状态,每个消费者独立地顺序拉取分区数据
- 消费者可以按照任意顺序消费消息,可以重置到旧的偏移量处理之前的消息
- 支持消费者组可以多个消费者通通消费一个topic
- 如果没有数据消费使会出传入一个时长参数timeout
- 消费顺序
- 生产者发送消息到指定分区通过自定义分区器实现为消息指定相同的key
- 消费者单线程消费同一分区
- 对消息进行编号或者添加时间戳
- 消息积压
- 增加消费者,但是不能超过分区数量
- 增加主题分区数量,重新平衡消费者
- **分区数决定了同组消费者个数的上限**
- 高可用
- 多个broker组成一个集群
- 创建一个topic然后划分为多个partitiion各自存放一部分数据放在不同的broker上面
- 消息确认机制
- ack=0最不可靠发送后无法知道是否到达broker
- ack=1等待leader确认消息但是不等待副本的确认
- ack=-1最可靠等待所有副本同步完成才确认

38
pages/Netty.md Normal file
View File

@@ -0,0 +1,38 @@
- Java网络通信底层框架
- 通过NIO多路复用机制实现单线程万个连接
- 封装Selector/Channel/Buffer提供Pipeline责任链式API
- 自带TCP粘包拆包、心跳检测、内存池
- 性能
- 基于NIO封装实现I/O多路复用
- Linux下使用epoll模型
- 使用零拷贝和堆外内存避免拷贝
- 利用对象池进行对象复用
- 扩展
- 基于事件驱动模型将业务剥离为ChannelHandler利用责任链可以根据不同业务扩展
- 线程处理
- 非耗时操作
- EventLoop直接处理
- 阻塞操作
- 提交到业务线程池
- I/O模型
- 同步阻塞BIO
- 同步非阻塞NIO
- IO多路复用
- 只使用一个select注册需要监听的连接并管理连接数据是否就绪已经就绪就通知别的线程用read来读取数据
- 信号驱动IO
- 异步IO
- 调用aio_read然后其他操作由内核完成内核完成后调用回调
- 使用场景
- 框架底层通信
- 游戏行业处理大量并发连接
- 通讯系统
- 物联网,处理内设备数据的收集与下发
- Reactor线程模型
- 单Reactor单线程模型
- 单Reactor多线程模型
- 主从Reactor多线程模型
- 零拷贝
- FileRegion调用操作系统的sendfile函数直接将文件数据从文件系统发送到网络接口无须经过用户态内存
- CompositeByteBuffer组合缓冲区将多个ByteBuffer组合成一个逻辑上的缓冲区不需要内存拷贝
- ByteBuf通过堆外内存避免到JVM内存拷贝支持将字节数组包装为ByteBuf也可以通过slice将ByteBuf拆分为小ByteBuf
- 内存映射文件,将文件映射到内存中,直接进行读取和写入,避免内存拷贝

29
pages/消息队列.md Normal file
View File

@@ -0,0 +1,29 @@
- 消息丢失
- 生产阶段
- 发送消息后只要能正常收到ack确认响应就表示发送成功否则进行消息重发
- 存储
- 写入多个节点,保证多个副本
- 消费
- 消费者接受消息+处理消息之后才回复ack
- 消息可靠性
- 消息持久化,保存到硬盘
- 消息确认机制
- 消息重试策略,多次失败后将消息发送到死信队列
- 消息顺序性
- 金融消费,用户转账
- kafka通过将消息划分到同一个分区中保证分区内消费的有序
- 通过单线程或串行化策略保证消息按照正确顺序消费
- 幂等写
- 唯一标识每个请求全局唯一UUID
- 数据库事务+乐观锁
- 数据库唯一约束
- 分布式锁
- 消息去重
- 消息积压
- 优化消费逻辑,批量处理消息
- 临时紧急扩容
- 增加consumer
- 新建topic使用临时分发数据的consumer分发积压的数据
- 保证数据一致性/事务消息
- 发送待发送的消息,生产者继续执行业务,成功就发送消息给消费者,失败就删除消息
- [[Kafka]]