在 Kafka 中,出产者写入音讯、顾客读取音讯的操作都是与 leader 副本进行交互的,从 而结束的是一种主写主读的出产消费模型。数据库、Redis 等都具有主写主读的功用,与此同时还支撑主写从读的功用,主写从读也便是读写分别,为了与主写主读对应,这儿就以主写从读来称谓。Kafka 并不支撑主写从读,这是为什么呢?

  从代码层面上来说,虽然增加了代码复杂度,但在 Kafka 中这种功用完全能够支撑。关于 这个问题,咱们能够从“收益点”这个视点来做具体分析。主写从读能够让从节点去分管主节 点的负载压力,防范主节点负载过重而从节点却闲暇的状况发生。可是主写从读也有 2 个很明 显的缺陷:

  (1)数据一致性问题。数据从主节点转到从节点必定会有一个延时的时间窗口,(waLsinsstube)这个时间 窗口会导致主从节点之间的数据纷歧致。某一时间,在主节点和从节点中 A 数据的值都为 X, 之后将主节点中 A 的值修改为 Y,那么在这个改动告知到从节点之前,运用读取从节点中的 A 数据的值并不为最新的 Y,由此便产生了数据纷歧致的问题。
  (2)延时问题。类似 Redis 这种组件,数据从写入主节点到同步至从节点中的进程需求经 历网络→主节点内存→网络→从节点内存这几个阶段,整个进程会耗费必定的时间。而在 Kafka 中,主从同步会比 Redis 愈加耗时,它需求阅历网络→主节点内存→主节点磁盘→网络→从节 点内存→从节点磁盘这几个阶段。对延时活络的运用而言,主写从读的功用并不太适用。
  实践状况下,许多运用既能够忍受必定程度上的延时,也能够忍受一段时间内的数据纷歧 致的状况,那么关于这种状况,Kafka 是否有必要支撑主写从读的功用呢?

  主写从读能够均摊必定的负载却不能做到完全的负载均衡,比方关于数据写压力很大而读 压力很小的状况,从节点只能分摊很少的负载压力,而绝大多数压力仍是在主节点上。而在 Kafka 中却能够抵达很大程度上的负载均衡,而且这种均衡是在主写主读的架构上结束的。咱们来看 一下 Kafka 的出产消费模型,如下图所示。

  干货|为什么Kafka不支撑读写分别
  在 Kafka 集群中有 3 个分区,每个分区有 3 个副本,正好均匀地散布在 3个 broker 上,灰色阴影的代表 leader 副本,非灰色阴影的代表 follower 副本,虚线表明 follower 副本从 leader 副本上拉取音讯。当出产者写入音讯的时分都写入 leader 副本,关于图 8-23 中的 现象,每个 broker 都有音讯从出产者流入;当顾客读取音讯的时分也是从 leader 副本中读取 的,关于图 8-23 中的现象,每个 broker 都有音讯流出到顾客。

  咱们很明显地能够看出,每个 broker 上的读写负载都是相同的,这就说明 Kafka 能够通过 主写主读结束主写从读结束不了的负载均衡。(shikong-movies)上图展现是一种志向的组织状况,有以下几种 状况(包括但不只限于)会构成必定程度上的负载不均衡:

  (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为什么不支持读写分离得原因?-干货的更多相关文章

  1. EF通用数据层封装类(支持读写分离,一主多从)

    浅谈orm 记得四年前在学校第一次接触到 Ling to Sql,那时候瞬间发现不用手写sql语句是多么的方便,后面慢慢的接触了许多orm框架,像 EF,Dapper,Hibernate,Servic ...

  2. 实施MySQL ReplicationDriver支持读写分离

    MySQL 提供支持读写分离的驱动类: com.mysql.jdbc.ReplicationDriver 替代 com.mysql.jdbc.Driver 注意,所有参数主从统一: jdbc:mysq ...

  3. SqlSugar ORM已经支持读写分离

    目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解 using (var db = new SqlSugarClient("主连接字符串", &qu ...

  4. .NETCore 下支持分表分库、读写分离的通用 Repository

    首先声明这篇文章不是标题党,我说的这个类库是 FreeSql.Repository,它作为扩展库现实了通用仓储层功能,接口规范参考 abp vnext 定义,实现了基础的仓储层(CURD). 安装 d ...

  5. SQL Server Alwayson读写分离配置

    标签:MSSQL/只读路由 概述 Alwayson相对于数据库镜像最大的优势就是可读副本,带来可读副本的同时还添加了一个新的功能就是配置只读路由实现读写分离:当然这里的读写分离稍微夸张了一点,只能称之 ...

  6. Mycat对MySQL进行垂直水平分表分库,读写分离

    1.   MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...

  7. Mycat读写分离、主从切换、分库分表的操作记录

    系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...

  8. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  9. 基于CDH,部署Apache Kylin读写分离

    一. 部署读写分离的契机 目前公司整体项目稳定运行在CDH5.6版本上,与其搭配的Hbase1.0.0无法正确运行Kylin,原因是Kylin只满足Hbase1.1.x+版本.解决方案如下 1. 升级 ...

随机推荐

  1. C++ 标准库,可变参数模板。可变参数数量,可变参数类型【转】

    #include <iostream> // 可变模板参数 // 此例:可以构造可变数量,可变类型的函数输入. // 摘自:https://www.cnblogs.com/qicosmos ...

  2. 【洛谷5465】[PKUSC2018] 星际穿越(倍增)

    点此看题面 大致题意: 给定\(l_{2\sim n}\),其中\(l_i\)表示\([l_i,i-1]\)的所有点与\(i\)之间存在一条长度为\(1\)的双向路径.每次询问给出\(l,r,x\), ...

  3. ZEN、ELECTRA、ALBERT

    一.ZEN 目前,大多数中文预训练模型基本上沿用了英文模型的做法,聚焦于小颗粒度文本单元(字)的输入.然而,与英文相比,中文没有空格等明确的词语边界.这个特点使得很多文本表达中存在的交叉歧义也被带入了 ...

  4. 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(2) - 单元测试

    上一章中我们完成了一个简单的登录功能, 这一章主要演示如何对Stylet工程中的ViewModel进行单元测试. 回忆一下我们的登录逻辑,主要有以下4点: 当"用户名"或" ...

  5. TensorFlow2教程(目录)

    第一篇 基本操作 01 Tensor数据类型 02 创建Tensor 03 Tensor索引和切片 04 维度变换 05 Broadcasting 06 数学运算 07 前向传播(张量)- 实战 第二 ...

  6. angularjs事件通信$on,$emit,$broadcast详解

    公司项目开发用的是angularjs,关于事件通讯一直用的是EventBus,直到上周写一个小组件懒得引用EventBus时,想到用angularjs自带的事件通信时,结果很尴尬的忘记原生方法单词怎么 ...

  7. Installation request for topthink/think-captcha ^3.0 -> satisfiable by topthink/think-captcha[v3.0.0].

    ThinkPHP5.1安装图形验证码的时候报错: Problem 1 - Installation request for topthink/think-captcha ^3.0 -> sati ...

  8. NOI2019退役记 upd:2019.12.1

    (我把原来写的东西全部删掉了) AFO. 我退役了,\(\mbox{yyb}\)退役了. 至少,在接下来的日子里,我得投身到文化课,度过快乐的高三生活了. 这两年的\(OI\)生涯给了我很多,让我学会 ...

  9. Spring Boot的注解,你知道或者不知道的都在这里!

    1.1 定义 Annotation(注解),用于为Java代码提供元数据.简单理解注解可以看做是一个个标签,用来标记代码.是一种应用于类.方法.参数.变量.构造器及包的一种特殊修饰符. 1.2 注解的 ...

  10. pyecharts和echarts的混合使用

    ECharts是一个由百度开发的纯 Javascript 的图表库,pyecharts是某三位大佬将ECharts移植到Python项目中的产物,在Python网站中可以更轻松的接入图表,但是个人感觉 ...