Apache Pulsar 在腾讯云稳定性优化实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. Apache Pulsar 在腾
讯云稳定性优化实践
腾讯云微服务中心
2. Who am I
• PingCAP -> StreamNative -> Tencent
• Apache Pulsar committer
• Apache BookKeeper contributor
• RoP maintainer
• Apache Pulsar Go client 作者
• Apache Pulsar Go Functions 作者
• StreamNative/pulsarctl 作者
3. Agenda
• 消息空洞的影响及规避措施
• 从消息生命周期看 TTL, Backlog 及 Retention 策略
• 延迟消息与 TTL 的关系
• Admin API Block 的优化处理
• zk-node 泄漏
• Bookie Ledger 泄漏
• Apache Pulsar 多级缓存的优化
• 未来稳定性规划
4. • 单条消息 Ack (在线消息) --> Ack Hole
• 如何理解 individuallyDeletedMessages?
消息空洞的
影响及规避
措施
• Broker 处理失败? Client 没有调用 Ack?
• 精确计算 Backlog Size?Broker 主动补偿?
5. Broker 主动补偿机制
--- Backlog 策略
• Producer Exception
• Producer Request Hold
• Consumer Backlog
Eviction
6. Broker 主动
补偿机制
Pulsar 计算 Backlog Size 的方式
7. Broker 主动
补偿机制
• 获取 individuallyDeletedMessages 集合的第一个元素
• 启动定时任务 Excutor Service
• 定期向 Client 推送 individuallyDeletedMessages
8. 再谈 TTL, Backlog 及 Retention 策略
• TTL: 表示消息在指定时间内没有被用户 Ack 时会在 Broker 主动 Ack 掉。
• Backlog:表示 Producer 发送的消息与 Consumer 接收消息之间的差距。
• Retention:表示的是当消息被 Ack 之后,继续在 Bookie 侧保留多久的时间,
以 Ledger为最小操作单元。
如果 TTL 和 Retention 同时设置,
那么一条消息的生命周期是怎么计算的?
9. 再谈 TTL, Backlog 及 Retention 策略
•
TTL: 根据设置的时间,定期检查,
不断更新 cursor 的位置(见右
图),将消息过期掉
•
Retention:检查 Ledgers 的创建
时间以及 Entry 的大小来决定是否
要删除某一个 Ledger
10. 再谈 TTL, Backlog 及 Retention 策略
• TTL < Retention:
• 消息的生命周期:TTL + Retention
• TTL >= Retention:
• 消息的生命周期:TTL Time
TTL 策略为什么要选择 Ledger 发生
切换的这个时机来触发 Ledger 的删
除操作?
11. 延迟消息与 TTL 的关系
丢消息?
12. 延迟消息与 TTL 的关系
•
一次性从 Entry 中获取
publishTime 和 delayTime
•
delayTime 是要发送时间点的时间
戳
https://github.com/apache/pulsar/pull/15628
13. Admin API Block 的优化处理
• 异步调用同步
• Http Lookup Service
• Pulsar WEB 服务性能较差
(CompletableFuture 的误用)
• Metadata Store 线程池的抽象
• 加入超时的处理避免 block
14. zk-node 泄漏
zk-node
泄漏
15. Zk-node 泄漏de 泄漏
• 首先获取 zk-node 下所有的 topic 列表
• 通过 pulsar-admin check 集群中是否存
在该 topic
•
切记: 清理 zk 数据之前,请先备份 zk 数
据
16. Bookie Ledger 泄漏de 泄漏
•
触发 Ledger 删除的唯一路径:
Retention 策略
• Bookie CLI ???
• 获取 LedgerInfo 中创建 Ledger 的时间
• 确认 Ledger 是否存在 Bookie 中且
Broker 不存在该 Topic
•
切记:高危操作,请先备份!!
17. Pulsar 缓
存优化
18. Pulsar 缓存
优化
19. Pulsar 缓存优化-- OHC +LRU
20. 未来稳定性规划
• 1 s 耗时的规避及优化
• 客户端超时时间内的重试策略
• Broker 和 Bookie OOM 的优化
• Bookie Auto Recover 优化
• Bookie 消息丢失的情况复现(周边工具完善)
21. 鸣谢
• 腾讯云中间件团队
• StreamNative Platform 团队
22. Q & A
路漫漫其修远兮,吾将上下而求索
腾讯云微服务中心