Kafka为什么不像redis和mysql可以支持主从分离呢

Posted monkjavaer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka为什么不像redis和mysql可以支持主从分离呢相关的知识,希望对你有一定的参考价值。

作者:huxihx
链接:https://www.zhihu.com/question/327925275/answer/705690755
来源:知乎

首先明确一下:主从分离与否没有绝对的优劣,它仅仅是一种架构设计,各自有适用的场景。
第二、如你所说,Redis和MySQL都支持主从读写分离,我个人觉得这和它们的使用场景有关。对于那种读操作很多而写操作相对不频繁的负载类型而言,采用读写分离是非常不错的方案——我们可以添加很多follower横向扩展,提升读操作性能。反观Kafka,它的主要场景还是在消息引擎而不是以数据存储的方式对外提供读服务,通常涉及频繁地生产消息和消费消息,这不属于典型的读多写少场景,因此读写分离方案在这个场景下并不太适合。
第三、Kafka副本机制使用的是异步消息拉取,因此存在leader和follower之间的不一致性。如果要采用读写分离,必然要处理副本lag引入的一致性问题,比如如何实现read-your-writes、如何保证单调读(monotonic reads)以及处理消息因果顺序颠倒的问题。相反地,如果不采用读写分离,所有客户端读写请求都只在Leader上处理也就没有这些问题了——当然最后全局消息顺序颠倒的问题在Kafka中依然存在,常见的解决办法是使用单分区,其他的方案还有version vector,但是目前Kafka没有提供。

以上是关于Kafka为什么不像redis和mysql可以支持主从分离呢的主要内容,如果未能解决你的问题,请参考以下文章

小记---------maxwell 一个可以实时读取mysql二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafka,Redis,文件或其他平台的应用程序

Kafka,Mq和Redis作为消息队列使用

Kafka,Mq和Redis作为消息队列使用

Canal+Kafka实现MySql与Redis数据一致性

为什么Kafka不支持读写分离

阿里面试,为什么Kafka不支持读写分离