差异点 | 传统消息中间件 | Kafka |
分布式的架构设计理念 | 所有的client同时与集群中的其中一个broker建立连接,只有该broker挂掉之后,才会将所有的client全部迁移到其他的broker。 | 不同的topic被“打散”分布在不同的broker上,client向集群中不同的broker发起连接,这样就降低了单个broker的负载,提高了系统的整体并发度。 并且可以根据各个broker上的负载,对leader副本进行再平衡。 |
容错性 | 无备份,只是在broker挂掉之后,整体迁移到其他的broker的。可能会导致数据丢失。 | 针对每个topic的每个partition,将数据同步到其他的broker上。在主副本挂掉之后,数据不会丢失。 对于可靠性要求较高的,设置较大的副本数;如果对可靠性要求不搞,而对时延、吞吐量要求较高,可以设置较小的副本。 |
同主题并行消费 | 如果发送的吞吐量太大,可能会导致消费不及时的情况,此时只能增加主题个数。 | 引入了partition的概念,可以将同主题的消息发送到不同的分区,然后分区消费。并且可以根据分区的数据量,对消费组进行再平衡。 |
基于日志的消息存储 | push方式,基于内存,消息抵达目的地,内存中的消息便删除了。 | pull方式,基于日志被持久化保存了,这样消费端掌握了主动权,可以随时消费,支持消息回放。 |
参考链接: