我们引入了业界广泛使用的消息队列 Kafka 来作为内部消息传输的枢纽在线课堂。
前面提到在线课堂了一些这么使用的原因:
减少长连接 Broker 内部状态在线课堂,让 Broker 可以无压力扩容
知乎内部已平台化在线课堂,支持水平扩展
还有一些原因是:
使用消息队列削峰在线课堂,避免突发性的上行或下行消息压垮系统
业务系统中大量使用 Kafka 传输数据在线课堂,降低与业务方对接成本
其中利用消息队列削峰好理解,下面我们看一下怎么利用 Kafka 与业务方更好地完成对接在线课堂。
发布
长连接 Broker 会根据路由配置将消息发布到 Kafka Topic,同时也会根据订阅配置去消费 Kafka 将消息下发给订阅客户端在线课堂。
路由规则和订阅规则是分别配置的在线课堂,那么可能会出现四种情况:
消息路由到 Kafka Topic,但不消费,适合数据上报的场景在线课堂。
消息路由到 Kafka Topic,也被消费,普通的即时通讯场景在线课堂。
直接从 Kafka Topic 消费并下发,用于纯下发消息的场景在线课堂。
消息路由到一个 Topic,然后从另一个 Topic 消费,用于消息需要过滤或者预处理的场景在线课堂。
这套路由策略的设计灵活性非常高,可以解决几乎所有的场景的消息路由需求在线课堂。同时因为发布订阅基于 Kafka,可以保证在处理大规模数据时的消息可靠性。