Apache Pulsar在微信的大流量实时推荐场景实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. Apache Pulsar
在微信大流量实时推荐场景实践
刘燊
2022.08.27
2. 自我介绍
• 腾讯微信高级研发工程师
• Apache Pulsar Contributor
• GitHub ID:@dragonls
• 联络方式:liushen001@126.com
2
3. 目录
• 业务场景简介
• 大流量场景下的k8s部署实践
• 非持久化Topic的应用
• 负载均衡与broker cache优化
• COS Offloader开发与应用
• 未来展望与计划
3
4. 1
业务场景简介
业务介绍
业务应用
推荐业务
数据接入
SDK
风控
监控系统
消息中间件
AI平台
数据计算
…
数据存储
MQ
数据采集
KV
4
5. 1
业务场景简介
为何选型Pulsar
• 云原生
• 支持资源隔离
• 灵活的Namespace/Topic策略管控
• 便捷扩容
• 多语言Client
5
6. 2
大流量场景下的k8s部署实践
6
7. 2
大流量场景下的k8s部署实践
原生Pulsar on K8s部署架构
Pulsar on K8s
Proxy 0
Producer
Consumer
In
Proxy 1
Out
Broker 0
In
Out
…
Proxy N
statefulset
Zookeeper 0
Bookie 0
In*Replica
Broker 1
Bookie 1
Out
…
Broker N
…
Bookie N
statefulset
Zookeeper 1 … Zookeeper N
statefulset
statefulset
Pulsar Manager
deployment
7
8. 2
大流量场景下的k8s部署实践
优化后Pulsar on k8s部署架构
Pulsar on K8s
Proxy 0
… Broker 0
Proxy N Broker 1
statefulset
Producer
Consumer
In
Out
Zookeeper 0
Bookie 0
In*Replica
Bookie 1
Out
…
Broker N
…
Bookie N
statefulset
Zookeeper 1 … Zookeeper N
statefulset
statefulset
Pulsar Manager
deployment
8
9. 2
大流量场景下的k8s部署实践
Pulsar on K8s部署优化
• 去Proxy
• Bookie使用多盘多目录 + 本机SSD
• 日志采集:腾讯云CLS(日志服务)
• 指标采集:Grafana + Kvass + Thanos
9
10. 3
非持久化Topic的应用
10
11. 3
非持久化Topic的应用
持久化与非持久化Topic的异同
持久化Topic(Persistent Topic)
Producer
Consumer
Broker
Dispatcher
Managed
Ledger
Bookie
Client
Bookie
非持久化Topic(Non-persistent Topic)
Producer
Consumer
Broker
Dispatcher
11
12. 3
非持久化Topic的应用
非持久化Topic在大流量实时推荐下的应用场景
• 可容忍少量数据丢失
- 大流量+消费端处理能力不足的实时训练任务
- 时效性敏感的实时训练任务
- 抽样评测任务
12
13. 4
负载均衡与broker cache优化
13
14. 4
负载均衡与broker cache优化
Broker负载均衡——反复出现bundle unload
14
15. 4
负载均衡与broker cache优化
Broker负载均衡
loadManagerClassName=org.apache.pulsar.broker.loadbalance.impl.ModularLoadManagerImpl
loadBalancerLoadSheddingStrategy=org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder
loadBalancerBrokerThresholdShedderPercentage=10
loadBalancerBrokerOverloadedThresholdPercentage=70
Load bundle处理类(select for broker):org.apache.pulsar.broker.loadbalance.impl.LeastLongTermMessageRate
需要unload的bundle: 20%
Threshold shedder load: 10%
80%
Avg load: 50%
60%
10%
Broker 1
Broker 2
Broker 3
15
16. 4
负载均衡与broker cache优化
Broker负载均衡
loadManagerClassName=org.apache.pulsar.broker.loadbalance.impl.ModularLoadManagerImpl
loadBalancerLoadSheddingStrategy=org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder
loadBalancerBrokerThresholdShedderPercentage=10
loadBalancerBrokerOverloadedThresholdPercentage=70
Load bundle处理类(select for broker):org.apache.pulsar.broker.loadbalance.impl.LeastLongTermMessageRate
Threshold shedder load: 10%
80%
Avg load: 50%
60%
10%
Broker 1
Broker 2
Broker 3
16
17. 4
负载均衡与broker cache优化
Broker负载均衡优化
loadManagerClassName=org.apache.pulsar.broker.loadbalance.impl.ModularLoadManagerImpl
loadBalancerLoadSheddingStrategy=org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder
loadBalancerBrokerThresholdShedderPercentage=10
loadBalancerBrokerOverloadedThresholdPercentage=70
Load bundle处理类(select for broker):在低于平均负载的broker中随机选择
loadBalancerDistributeBundlesEvenlyEnabled=false (相同的代码实现:PR-16059)
Threshold shedder load: 10%
60%
60%
Broker 1
Avg load: 50%
30%
Broker 2
Broker 3
类似代码实现:PR-16281
loadBalancerLoadPlacementStrategy=org.apache.pulsar.broker.loadbalance.impl.LeastResourceUsageWithWeight
17
18. 4
负载均衡与broker cache优化
Broker负载均衡优化效果
优化前
优化后
18
19. 4
负载均衡与broker cache优化
实时推荐场景下的Broker cache优化
• 消费任务数量众多
• 消费速度参差不齐
• 消费任务经常重启
19
20. 4
负载均衡与broker cache优化
实时推荐场景下的Broker cache优化
managedLedgerCacheSizeMB
managedLedgerCursorBackloggedThreshold
managedLedgerCacheEvictionTimeThresholdMillis
20
21. 4
负载均衡与broker cache优化
Broker cache优化效果
优化前
优化后
21
22. 5
COS Offloader开发与应用
22
23. 5
COS Offloader开发与应用
Pulsar Offloader概览
23
24. 5
COS Offloader开发与应用
Bookie存储成本较高
• Bookie Journal/Ledger盘都使用SSD
• 业务需求存储时间长,数据存储量大
• 数据消费任务异常,需要容忍较长时间的数据backlog
• 数据回放需求
开发腾讯云COS Offloader插件并应用于线上
24
25. 6
未来展望与计划
25
26. 6
未来展望与计划
未来展望与计划
• 跟进社区版本升级与bugfix
• Broker负载均衡与cache优化
• Flink、Pulsar、数据湖全链路打通
26
27. Thanks