MQ平台在VIPKID的架构演进实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1.
2. MQ平台在VIPKID的架构演进实践 VIPKID 基础架构存储平台
3. 主讲人 石鹏 VIPKID存储平台团队负责人 10+年专注于分布式存储、高并发、高可用,曾就职于摩托罗拉、爱奇艺 2019年5月加入VIPKID,目前负责VIPKID存储中间件平台,包括Redis平 台、Kafka平台、RocketMQ平台、ElasticSearch搜索平台、数据库访问 平台、对象存储平台等
4. 目 录 01 Content 02 03 04 平台简介 RocketMQ:业务类 Kafka:日志类 MQ平台一期方案 做了哪些Features 存在哪些不足 MQ平台二期方案 加了Proxy怎样解决MQ消息丢失、重复,保证顺序 Proxy层怎样保证高可用 基于Proxy增强MQ平台原生能力 收益总结 避免了多语言客户端迭代的风险和人工成本 流量调度和容灾自动化
5. 01 MQ平台简介 RocketMQ:业务类场景 Kafka:日志类场景
6. 02 MQ平台一期方案 我们做了什么 存在哪些不足
7. Feature1:封装Java版RocketMQ客户端 • 可动态更新客户端配置 • 避免用户自维护客户端稳定性风险 • 监控数据上报
8. Feature2:提供RocketMQ的管理后台
9. Feature3:提供Kafka的管理后台
10. Feature4:提供统一的监控告警 • 客户端上报监控信息到监控平台 • 收集Broker监控信息到监控平台 • 统一对接告警平台做IM、邮件、短信、电话等告警
11. 问题1:怎样提供MQ多语言客户端支持 • 同时维护多语言MQ客户端:升级成本高、风险大 思考: • 怎样以最小的代价提供MQ多语言客户端?
12. 问题2:客户端升级需多业务配合,代价高 • 客户端更新需要所有业务应用升级 思考: • 怎样规避业务端一起升级带来的代价?
13. 问题3:由于历史原因多个Kafka版本难统一 • 不同业务应用使用Kafka版本不同,怎样统一? 思考: • 怎样统一Kafka版本且无稳定性风险?
14. 03 MQ平台二期方案 基于Proxy重构MQ平台的架构 加了Proxy后如何避免消息丢失、重复,保证顺序 Proxy层的高可用方案 基于Proxy怎样做到MQ集群容灾自动化智能化 基于Proxy提供MQ数据自动化迁移工具 基于Proxy增强Kafka消息过滤能力
15. 基于Proxy重构MQ平台的架构 • PProxy:传统MQ Producer客户端 • CProxy:传统MQ Consumer客户端 • 业务轻量级多语言客户端与Proxy通信: GRPC • PProxy&CProxy通信做流量调度:借助 管理后台 • 客户端无需升级:仅升级Proxy即可 • 无需维护多语言:Proxy仅用Java实现
16. 加了PProxy如何避免Kafka消息丢失 • 收到确认才算发成功 • 若超时则换Proxy重试 • 会重不会丢
17. 加了CProxy如何避免Kafka消息丢失 • 向broker提交offset后才算消费 成功 • 业务处理失败可从CProxy上重新 拉取
18. 加了PProxy怎样避免消息重复 • 发批量消息:平均负载到每个 broker • 向单broker发送失败时仅重试该 broker对应的消息
19. 加了CProxy怎样避免消息重复 • Consumer&partition rebalance:清空CProxy上的 buffer • 清空buffer仍可能重复:消息已 被client拉取,rebalance后,新 的CProxy节点仍会消费此消息
20. 加了PProxy怎样保证顺序消息 • 顺序消息的原理:顺序消息落到 同一个partition, 并串行发消息 • Proxy发消息也要保证串行
21. 加了CProxy怎样保证顺序消息 问题: • Partition与Cproxy consumer一 一对应。 • 但无法保证一个客户端仅对应一 个Cproxy consumer 解决方案: • Client确认处理完CProxy的消息 后,CProxy consumer的后面缓 存的消息才能被其他客户端拉取
22. PProxy 如何保证高可用 • 发消息,PProxy单节点访问失败, 自动重试另一节点 • 若PProxy集群故障,业务客户端 直连MQ Broker
23. CProxy如何保证高可用 • 单台CProxy故障:消息可能会重 (Client拉取到消息,CProxy未 提交offset)但不会丢 • CProxy集群故障:消费MQ要等 CProxy恢复后
24. 基于Proxy实现MQ跨集群容灾 • 发消息,集群故障自动发现, 自动流量调度,业务无感 • 主备MQ Broker集群,单写双 消费 • 通过滑动窗口检测超阈值触发 熔断,自动检测是否恢复 • 自动流量调度
25. 基于Proxy提供集群数据迁移工具 • 切换写集群 • 单写双消费 • 原集群数据消费完毕后下线
26. 基于CProxy实现MQ消息过滤 • 需求:MQ Broker中数据格式 无法改变 • CProxy对数据预处理,消费完 并过滤好等Client来拉取,提升 性能 • 避免业务无意义消费全量消息 后做过滤
27. 后续展望 • 合并RocketMQ和Kafka的管理后台 • 合并Kafka和RocketMQ的客户端为Proxy的客户端 • 基于Proxy实现MQ的双机房双活的流量调度
28. 04 MQ平台收益总结 不必浪费人力同时维护多语言客户端 消除客户端升级带来的人力成本和稳定性风险 统一服务端MQ版本 业务层对存储层无感知,一种客户端可兼容多种MQ 自动流量调度&故障容灾 可更轻量增强MQ原生功能
29.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 17:39
浙ICP备14020137号-1 $Map of visitor$