Kafka权威指南阅读笔记(第八章)
跨集群数据镜像
使用场景:
区域集群和中心集群
这种场景下,每个区域的应用程序只访问相应的区域内的集群。而有些情况下,需要将各个集群的信息汇总到中心集群,就可以用中心集群分析业务数据了。
冗余
一个Kafka集群足以支撑所有的应用程序,但是为了高可用,可以做一个灾备。
云迁移
有很多公司将业务同时部署在本地数据中心和云端。为了实现冗余,应用程序通常运行在多个云供应商的多个服务区域里,或者使用多个云服务。本地和每个云服务都有一个Kafka集群。
有些情况下,也会在数据中心之间传输数据。例如云端部署了一个新的应用,他需要访问本地的数据。本地的应用程序负责更新数据,并把他们保存在本地的数据库里,我们用Conntect捕获这些数据库变更,并把他们保存到本地的Kafka集群上,然后再镜像到云端的Kafka集群上,有助于控制跨数据中心的流量成本,也有助于改进流量的监管和安全性。
多集群架构
跨数据中心会考虑到的一些问题
高延迟
网络通信导致网络延迟是常见的现象。
有限的带宽
单个数据中心的广域网的带宽一般是有限的。
高成本
集群之间的通信都需要成本。因为带宽有限,增加带宽是很昂贵的。
一般我们倾向于为每一个数据中心安装一个Kafka集群,并在这个集群中间复制数据,而不是让不用的应用程序通过广域网访问数据。
原则有:
- 每个数据中心至少需要一个集群
- 每两个数据中心之间的数据复制到做到每个事件仅复制一次。除非需要重试。
- 如果有可能,尽量从远程数据中心读取数据,而不是从远程数据中心写入数据。
Hub 和Spoke架构
中央度量集群。
变种:一个首领集群和一个跟随者集群。前者是首要集群,后者是非关键的报表集群。
这种架构的特点就是,数据分散在多个数据中心,每个数据中心的应用程序只处理自己的数据中心的数据,并且不能访问中央集群的数据。
好处在于数据只会在本地数据中心生成,每个数据中心的数据只会被镜像到中央数据中心一次。只处理单个数据中心的数据的应用程序部署到本地数据中心,而需要处理多个数据中心的数据的应用程序部署到中央数据中心里。数据复制是单向的,这种架构易于部署,配置和监控。
缺点:一个数据中心无法访问另一个数据中心的数据。一个例子就是银行的业务系统,用户会不确定在哪个集群所在城市使用业务,而多个数据中心之间是互相独立的,因此并不适用于这种架构。
双活架构
两个数据中心集群 之间互相共享数据,且同时拥有所有的应用程序。
这种架构的好处就是,能够为就近的用户提供服务,具有性能上的优势。第二个好处就是冗余和弹性。每一个数据中心都是完备的。当一个数据中心失效,可以透明的将用户重定向到另一个数据中心。
缺点:
如何在进行多个位置的数据异步读取和异步更新时避免冲突。简言之,数据一致性。
方案:使用这种架构时,开发人员通常将用户每次都路由到同一个数据中心。
如果两个数据中心几乎同时都收到了一份数据,那么需要确定如何处理这种情况。
方案:一是定义一致的原则,确定哪一个是正确的。二是将两个事件都看作是正确的事件。
亚马逊就是用这种方案:设立一个专门的部分来处理冲突,也就是退货。但是对于股票交易部门来说是行不通的,需要根据具体情况而定。
总之这种架构必然会出现冲突的问题,并且需要想办法解决他们。
Kafka的官方最推荐使用这种架构,因为这是最具伸缩性,弹性,灵活性和成本优势的解决方案。值得投入精力去处理数据冲突,避免循环复制,一致性路由尽量减少冲突等问题。
避免循环镜像的方法就是使用命名空间。用户需要指定订阅哪一个命名空间下的主题。
Kafka的未来版本中会增加数据中心的信息,可以使用这些信息来避免循环镜像。
主备架构
这种架构可以用于任何一种场景。
要实现不丢失数据或者无重复数据的Kafka集群失效备援是不可能的事情。
缺点就是有点浪费。
失效备援的内容:
1.数据丢失和不一致
Kafka的集群镜像方案都是异步的,并且Kafka目前还不支持事务。切换到灾备集群之后,应用程序需要知道该如何处理数据。
2.起始偏移量
偏移量自动重置。要么从头开始读取,要么从最新的末尾开始读取。从末尾开始读取数据的方式更常见。
复制偏移量主题。__consumer_offets。
主机群和偏移量和灾备集群的偏移量无法保证是完全匹配的。因为镜像时间和保留时间不确定。
即便是在主题创建之后立即开始镜像,主机群和灾备集群的主题偏移量都从0开始,生产者的重试依然会造成偏移量的偏离。目前的Kafka镜像解决方案无法为主集群和灾备集群保留偏移量。
即便保留了偏移量,因为主机群和灾备集群之间的延迟以及Kafka缺乏对事务的支持,消费者提交的偏移量可能在记录之前或者记录之后到达。失效备援之后,消费者就会发现偏移量和记录不匹配,或者灾备集群的偏移量比主机群最新的偏移量小。
在这些情况下,我们要接受重复的数据。
基于时间的失效备援:知道失效备援发生的时间,可以让消费者根据时间戳查找偏移量,从而回到附近的一个偏移量。
偏移量外部映射:官方不推荐使用这种方案,不值得。推荐使用第一种方案,只需要使用新版的API。
失效备援之后:
通常将旧集群清理掉,删除所有的数据和偏移量,然后从新的主机群把数据镜像回来,保证数据是一致的。如果不删除数据会出现重复数据或者丢失数据的情况,容易出现不一致的情况。
延展集群
Kafka内置的复制机制,可以打开延展集群的同步复制功能,生产者会在消息成功写入其他数据中心后收到确认。同步复制功能要求使用机架信息,确保每个分区在其他数据中心都存在副本,还需要配置min.isr和acks=all。
同步复制是这种集群架构的最大优势,有些业务要求灾备站点和主站点保持100%的同步复制。另一个好处就是数据中心所有的Broker都发挥了作用。
缺点是他所能应对的灾难类型很有限,只能应对数据中心的故障,不能应对应用程序或者Kafka的故障。运维复杂性是它的另一个不足之处,他所需要的物理基础设施不是所有的功能都能承担起的。
如果能够至少在3个具有高带宽和低延迟的数据中心上安装Kafka,那么就可以使用这种架构。Zookeeper要求集群里的节点是奇数个。
Kafka权威指南阅读笔记(第八章)的更多相关文章
- Kafka 权威指南阅读笔记(第三章,第四章)
Kafka 第三章,第四章阅读笔记 Kafka 发送消息有三种方式:不关心结果的,同步方式,异步方式. Kafka 的异常主要有两类:一种是可重试异常,一种是无需重试异常. 生产者的配置: acks ...
- Kafka权威指南阅读笔记(第六章)
Broker配置 Kafka可以同时拥有可靠的主题和非可靠的主题.非可靠的主题允许丢失. 复制系数 主题级别的配置参数是 replication.factor,在Broker级别则可以通过defaul ...
- Kafka权威指南阅读笔记(第五章)
Kafka Broker kafka 第一个启动的Broker在ZooKeeper中创建一个临时节点/controller,让自己成为控制器.其他Broker启动后在控制器节点上创建Watch对象,便 ...
- Javascript权威指南阅读笔记--第3章类型、值和变量(1)
之前一直有个想法,好好读完JS权威指南,便于自己对于JS有个较为全面的了解.毕竟本人非计算机专业出生,虽然做着相关行业的工作,但总觉得对于基础的掌握并没有相关专业学者扎实,正好因为辞职待业等原因,还是 ...
- mycat权威指南阅读笔记--序言1
前言 mycat官方地址http://www.mycat.io/,mycat是关系数据库的中间件,也就是说它可以把后端的多个数据库,抽象成一个关系数据库. mycat能干啥 官方文档介绍,主要是用来做 ...
- Kafka权威指南 读书笔记之(五)深入Kafka
集中讨论以下3 个有意思的话题 :• Kafka 如何进行复制:• Kafka 如何处理来自生产者和消费者的请求 :• Kafka 的存储细节,比如文件格式和索引. 集群成员关系 Kafka 使用 Z ...
- Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...
- Kafka权威指南 读书笔记之(三)Kafka 生产者一一向 Kafka 写入数据
不管是把 Kafka 作为消息队列.消息总线还是数据存储平台来使用 ,总是需要有一个可以往 Kafka 写入数据的生产者和一个从 Kafka 读取数据的消费者,或者一个兼具两种角色的应用程序. 开发者 ...
- Kafka权威指南 读书笔记之(一)初识Kafka
发布与订阅消息系统 数据(消息)的发送者(发布者)不会直接把消息发送给接收者,这是发布与订阅消息系统的一个特点.发布者以某种方式对消息进行分类,接收者(订阅者)订阅它们, 以便接收特定类型的消息.发布 ...
随机推荐
- 在vue中使用[provide/inject]实现页面reload
在vue中实现页面刷新有不同的方法: 如:this.$router.go(0),location.reload()等,但是或多或少会存在问题,如页面会一闪等 所以建议使用[provide/inject ...
- 如何优雅的使用springboot项目内置tomcat
问题:以前,我们在使用SSM框架的时候,都是通过外置的tomcat进行部署,如果想访问文件,直接拖到项目的根目录下面即可.假如我们需要放一个apk文件,然后让别人下载,只需将apk放到项目根目录下面, ...
- UML图标含义及记忆方法
记忆技巧: 箭头的一方为被动方(被调用者): 箭头的端点为主动方(调用者). 箭头为封闭三角形时,表示类间关系 箭头为半封闭尖括号时,表示类内关系.其中,虚线表示参数强制依赖关系,实线表示属性关系.一 ...
- Two progressions CodeForce 125D 思维题
An arithmetic progression is such a non-empty sequence of numbers where the difference between any t ...
- java+maven+jenkins+svn构建
操作参照:https://blog.csdn.net/qq_34977342/article/details/82346915 1.创建一个自由风格的项目,起名字 2.设置构建项目最大保存数量,与天数 ...
- Google资深工程师深度讲解Go语言★
课程目录 第1章 课程介绍 第2章 基础语法 第3章 内建容器 第4章 面向“对象” 第5章 面向接口 第6章 函数式编程 第7章 错误处理和资源管理 第8章 测试与性能调优 第9章 Goroutin ...
- One layer SoftMax Classifier, "Handwriting recognition"
import lib needed¶ In [1]: from PIL import Image import numpy as np import matplotlib.pyplot as ...
- 离线服务器安装zabbix
因为机房内的服务器并不是所有都能上外网,所以利用zabbix官方源的安装方法就行不通了,又嫌弃编译安装麻烦,所以这里选择离线RPM包安装zabbix.(如需完整rpm包可以留言与我联系) 下载zabb ...
- 解决thinkphp批量上传图片只有一张上传成功解决方案
批量上传时 存在一个生成文件名的问题 如果出现此bug,则不要用原生的生成规则来命名图片文件名 如果你试试同时上传两个不同类型,例如一张jpg,一张png,你就发现的确是可以两张同时上传的! 方案1: ...
- Android 手机端自动化测试框架
前言: 大概有4个月没有更新了,因项目和工作原因,忙的手忙脚乱,趁十一假期好好休息一下,年龄大了身体还是扛不住啊,哈哈.这次更新Android端自动化测试框架,也想开源到github,这样有人使用才能 ...