我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Kafka为什么不支持读写分离

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Kafka为什么不支持读写分离

本篇文章为大家展示了Kafka为什么不支持读写分离,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在 Kafka 中,生产者写入消息、消费者读取消息的操作都是与 leader 副本进行交互的,从 而实现的是一种主写主读的生产消费模型。数据库、Redis  等都具备主写主读的功能,与此同时还支持主写从读的功能,主写从读也就是读写分离,为了与主写主读对应,这里就以主写从读来称呼!

Kafka 并不支持主写从读,这是为什么呢?

从代码层面上来说,虽然增加了代码复杂度,但在 Kafka 中这种功能完全可以支持。对于  这个问题,我们可以从“收益点”这个角度来做具体分析。主写从读可以让从节点去分担主节 点的负载压力,预防主节点负载过重而从节点却空闲的情况发生。但是主写从读也有  2 个很明显的缺点:

  • 数据一致性问题。数据从主节点转到从节点必然会有一个延时的时间窗口,这个时间 窗口会导致主从节点之间的数据不一致。某一时刻,在主节点和从节点中 A  数据的值都为 X, 之后将主节点中 A 的值修改为 Y,那么在这个变更通知到从节点之前,应用读取从节点中的 A 数据的值并不为***的  Y,由此便产生了数据不一致的问题。

  • 延时问题。类似 Redis 这种组件,数据从写入主节点到同步至从节点中的过程需要经  历网络→主节点内存→网络→从节点内存这几个阶段,整个过程会耗费一定的时间。而在 Kafka 中,主从同步会比 Redis  更加耗时,它需要经历网络→主节点内存→主节点磁盘→网络→从节 点内存→从节点磁盘这几个阶段。对延时敏感的应用而言,主写从读的功能并不太适用。

现实情况下,很多应用既可以忍受一定程度上的延时,也可以忍受一段时间内的数据不一致的情况!

那么对于这种情况,Kafka 是否有必要支持主写从读的功能呢?

主写从读可以均摊一定的负载却不能做到完全的负载均衡,比如对于数据写压力很大而读  压力很小的情况,从节点只能分摊很少的负载压力,而绝大多数压力还是在主节点上。而在 Kafka  中却可以达到很大程度上的负载均衡,而且这种均衡是在主写主读的架构上实现的。我们来看 一下 Kafka 的生产消费模型,如下图所示:

Kafka为什么不支持读写分离

在 Kafka 集群中有 3 个分区,每个分区有 3 个副本,正好均匀地分布在 3个 broker 上,灰色阴影的代表 leader  副本,非灰色阴影的代表 follower 副本,虚线表示 follower 副本从 leader 副本上拉取消息。当生产者写入消息的时候都写入 leader  副本,对于上图中的情形,每个 broker 都有消息从生产者流入;当消费者读取消息的时候也是从 leader 副本中读取 的,对于图 8-23 中的情形,每个  broker 都有消息流出到消费者。

我们很明显地可以看出,每个 broker上的读写负载都是一样的,这就说明 Kafka 可以通过  主写主读实现主写从读实现不了的负载均衡。上图展示是一种理想的部署情况,有以下几种 情况(包含但不仅限于)会造成一定程度上的负载不均衡:

(1)broker 端的分区分配不均。当创建主题的时候可能会出现某些 broker 分配到的分区数 多而其他 broker  分配到的分区数少,那么自然而然地分配到的 leader 副本也就不均。

(2)生产者写入消息不均。生产者可能只对某些 broker 中的 leader 副本进行大量的写入操 作,而对其他 broker 中的 leader  副本不闻不问。

(3)消费者消费消息不均。消费者可能只对某些 broker 中的 leader 副本进行大量的拉取操 作,而对其他 broker 中的 leader  副本不闻不问。

(4)leader 副本的切换不均。在实际应用中可能会由于 broker 宕机而造成主从副本的切换, 或者分区副本的重分配等,这些动作都有可能造成各个  broker 中 leader 副本的分配不均。

对此,我们可以做一些防范措施。

针对第一种情况,在主题创建的时候尽可能使分区分配 得均衡,好在 Kafka 中相应的分配算法也是在极力地追求这一目标,如果是开发人员自定义的  分配,则需要注意这方面的内容。对于第二和第三种情况,主写从读也无法解决。对于第四种 情况,Kafka 提供了优先副本的选举来达到 leader  副本的均衡,与此同时,也可以配合相应的 监控、告警和运维平台来实现均衡的优化。

在实际应用中,配合监控、告警、运维相结合的生态平台,在绝大多数情况下 Kafka 都能 做到很大程度上的负载均衡。

总的来说,Kafka 只支持主写主读有几个优点:

可以简化代码的实现逻辑,减少出错的可能;将负载粒度细化均摊,与主写从读相比,不仅负载效能更好,而且对用户可控;没有延时的影响;

在副本稳定的情况下,不会出现数据不一致的情况。为此,Kafka 又何必再去实现对它而言毫无收益的主写从读的功能呢?这一切都得益于 Kafka  优秀的架构设计,从某种意义上来说,主写从读是由于设计上的缺陷而形成的权宜之计。

上述内容就是Kafka为什么不支持读写分离,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Kafka为什么不支持读写分离

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Kafka为什么不支持读写分离

本篇文章为大家展示了Kafka为什么不支持读写分离,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在 Kafka 中,生产者写入消息、消费者读取消息的操作都是与 leader 副本进行交互的,从 而实
2023-06-16

Amazon Aurora支持读写分离吗

是的,Amazon Aurora支持读写分离。通过读写分离,您可以将读取请求路由到只读实例,从而分担主数据库实例的负载,并提高系统的整体性能。这有助于有效利用数据库资源,减轻主实例的压力,同时提供更好的读取性能。Amazon Aurora
Amazon Aurora支持读写分离吗
2024-04-09

数据库读写分离架构,为什么我不喜欢

RD:单库数据量太大,数据库扛不住了,我要申请一个数据库从库,读写分离。DBA:数据量多少?RD:5000w左右。DBA:读写吞吐量呢?RD:读QPS约200,写QPS约30左右。上周在公司听到两个技术同学讨论,感觉对读写分离解决什么问题没有弄清楚,有些奔溃。

	数据库读写分离架构,为什么我不喜欢
2014-09-07

MySQL读写分离原理是什么

这篇文章主要讲解了“MySQL读写分离原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL读写分离原理是什么”吧!一、读写分离的概念读写分离是基于主从复制来实现的。在实际的应用
2023-07-02

为什么微软不支持php8?

微软为何对PHP8不予支持?PHP是一种广泛使用的开源服务器脚本语言,被用于开发动态网页和应用程序。自1995年发布以来,PHP已经经历了多个版本的更新和改进,而PHP8作为最新的版本,在功能和性能上有了很大的提升。然而,虽然PHP8受到
为什么微软不支持php8?
2024-01-26

微软为什么不支持php8

微软不支持php8的原因:1、战略调整;2、市场竞争;3、技术兼容性;4、社区反馈;5、资源分配;6、技术风险;7、生态系统的考虑;8、法律和授权问题。详细介绍:1、战略调整,微软可能认为PHP在其整体战略中的地位较低,因此没有将PHP8的
微软为什么不支持php8
2023-12-21

mongodb为什么不支持事务

MongoDB不支持事务的主要原因是为了追求高性能和可伸缩性。事务需要锁定数据,并保证数据的一致性,这会限制并发性能和增加系统的复杂性。MongoDB的设计目标是提供高性能和可伸缩性的数据库解决方案,在大规模的读写操作下能够提供稳定的性能。
2023-09-04

mysql读写分离的作用是什么

这篇文章将为大家详细讲解有关mysql读写分离的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、说明是让主数据库处理事务性增、改、删操作,而从数据库处理SELECT查询操作。数据
2023-06-15

mysql读写分离的原理是什么

MySQL读写分离是指将数据库的读操作和写操作分开到不同的数据库服务器上,以达到提高数据库性能和可靠性的目的。其原理如下:主从复制:MySQL读写分离的核心技术是主从复制。主数据库负责处理写操作,从数据库负责处理读操作。主数据库将写操作的数
mysql读写分离的原理是什么
2024-03-15

为什么Python不支持i ++语法

本篇内容介绍了“为什么Python不支持i ++语法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!正常情况下,当有人问起++原因而不是Pyt
2023-06-16

为什么Java不支持多继承

这篇文章主要介绍“为什么Java不支持多继承”,在日常操作中,相信很多人在为什么Java不支持多继承问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么Java不支持多继承”的疑惑有所帮助!接下来,请跟着小编
2023-06-15

input为什么不支持伪元素

input 元素是 HTML 表单中的一个表单控件,用于接收用户的输入。它是一个自闭合标签,没有内容,因此不支持伪元素。伪元素是用于在 CSS 中选择和样式化元素的特殊选择器,例如 `::before` 和 `::after`。伪元素可以用
2023-10-21

Redis实现读写分离有什么用

这篇文章给大家分享的是有关Redis实现读写分离有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。读写分离Redis 通过副本,实现「主-从」运行模式,是故障切换的基石,用来提高系统运行可靠性。也支持读写分离
2023-06-27

Python为什么不支持switch语句

Python中没有内置的”switch”语句,这是因为设计者在设计Python语言时做出了一些权衡和决策。以下是一些可能的原因:一、简洁性和可读性;二、灵活性;三、向后兼容性。
Python为什么不支持switch语句
2023-10-29

腾讯云MySQL数据库代理正式发布,支持自动读写分离

2021年7月22日,腾讯云数据库正式发布数据库代理(又名proxy)服务,支持MySQL 5.7 版本和8.0 版本,可为用户提供透明且安全的网络代理服务,实现自动读写分离,降低业务使用数据库的复杂度,完美解决了数据库故障切换的网络瞬断问题,网络中断时间降低
腾讯云MySQL数据库代理正式发布,支持自动读写分离
2020-08-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录