Time:2019-11-4
Author:striVEWANG
Site:科兴科学院
Kafka为什么不提供像 MySQL 那样允许副本对外提供读服务?
原因一:读数据压力方面:
-
Kafka 的 Partition 分布在多个broker,当 Comsuer 消费数据的Partiton
是被分配到不同的Broker上,已经是负载均衡之后的请求。 -
Mysql读写数据都在主DB上,主DB请求压力太大,所以需要读写分离进行负载均衡。
原因二:数据一致性问题:
-
Kafka 的副本机制是异步消息拉取,因此就存在 Leader 和 Follwer 之间的不一致性。并且Kafka
保存的数据具有消费的概念,是流数据,具有严格的顺序要求,所以消费需要 Offset。如果从Kafka
的多个Follwer进行读,Offset无法保证正确性。 -
Mysql
主从数据同步在处理得当的情况下,在读数据的情况下是很少感受不到主从数据不一致。
原因三:应用场景:
-
Mysql在针对就是读频繁,写较少的的场景下,所以采用读写分离是很不错的方案。
-
Kafka
的使用场景更多情况是消息引擎而不是作为数据存储对外提供读服务,通常涉及到频繁的生产消息和消费消息,不属于读多写少的场景,因此读写分离不适用这个Kafka。