此文已由作者杨凯明授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
背景
为什么要做事务消息中心
原有kqueue的方式缺点:
降低业务库性能
占用业务库磁盘
历史数据管理成本高
技术运维工作量很大
事务消息中心的优点:
去除上述kqueue的缺点
易运维
易扩展
事务消息中心的缺点:
接入适当改造
增加网络开销
TMC基本概念
事务消息中心主要是提供两阶段提交的方案,对业务方消息提供保证投递的支持。
支持RabbitMQ及Kafka
支持多数据源、多类型
服务端水平扩展
不同业务拆库拆表
名词解释
Application:应用,对应CMDB上的应用名。
TableName:表名,一类消息可以存在一个消息表中,一个消息表可以对应多个exchange或者topic,一个TableName会创建一个Retry Thread及一个CallBack Thread。
TaskItem:任务项,代表一个topic或者一个exchange,一个TaskItem会创建6个Send Thread。
Send Thread:发送线程,每个TaskItem会有创建指定数量的发送线程,可以是Kafka的发送线程,也可以说RabbitMQ的发送线程。。
State Thread:状态线程,是处理消息队列comfirm的线程,包括Kafka、RabbitMQ。。
Retry Thread:重试线程,是处理投递失败消息的线程,重试次数默认是3次。如果发送线程内存队列积满,会导致消息只落库,不投递,也需要重试线程来发送。。