跨集群数据镜像

使用场景:
区域集群和中心集群
这种场景下,每个区域的应用程序只访问相应的区域内的集群。而有些情况下,需要将各个集群的信息汇总到中心集群,就可以用中心集群分析业务数据了。
冗余
一个Kafka集群足以支撑所有的应用程序,但是为了高可用,可以做一个灾备。
云迁移
有很多公司将业务同时部署在本地数据中心和云端。为了实现冗余,应用程序通常运行在多个云供应商的多个服务区域里,或者使用多个云服务。本地和每个云服务都有一个Kafka集群。
有些情况下,也会在数据中心之间传输数据。例如云端部署了一个新的应用,他需要访问本地的数据。本地的应用程序负责更新数据,并把他们保存在本地的数据库里,我们用Conntect捕获这些数据库变更,并把他们保存到本地的Kafka集群上,然后再镜像到云端的Kafka集群上,有助于控制跨数据中心的流量成本,也有助于改进流量的监管和安全性。

多集群架构

跨数据中心会考虑到的一些问题
高延迟
网络通信导致网络延迟是常见的现象。
有限的带宽
单个数据中心的广域网的带宽一般是有限的。
高成本
集群之间的通信都需要成本。因为带宽有限,增加带宽是很昂贵的。

一般我们倾向于为每一个数据中心安装一个Kafka集群,并在这个集群中间复制数据,而不是让不用的应用程序通过广域网访问数据。
原则有:

  1. 每个数据中心至少需要一个集群
  2. 每两个数据中心之间的数据复制到做到每个事件仅复制一次。除非需要重试。
  3. 如果有可能,尽量从远程数据中心读取数据,而不是从远程数据中心写入数据。

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权威指南阅读笔记(第八章)的更多相关文章

  1. Kafka 权威指南阅读笔记(第三章,第四章)

    Kafka 第三章,第四章阅读笔记 Kafka 发送消息有三种方式:不关心结果的,同步方式,异步方式. Kafka 的异常主要有两类:一种是可重试异常,一种是无需重试异常. 生产者的配置: acks ...

  2. Kafka权威指南阅读笔记(第六章)

    Broker配置 Kafka可以同时拥有可靠的主题和非可靠的主题.非可靠的主题允许丢失. 复制系数 主题级别的配置参数是 replication.factor,在Broker级别则可以通过defaul ...

  3. Kafka权威指南阅读笔记(第五章)

    Kafka Broker kafka 第一个启动的Broker在ZooKeeper中创建一个临时节点/controller,让自己成为控制器.其他Broker启动后在控制器节点上创建Watch对象,便 ...

  4. Javascript权威指南阅读笔记--第3章类型、值和变量(1)

    之前一直有个想法,好好读完JS权威指南,便于自己对于JS有个较为全面的了解.毕竟本人非计算机专业出生,虽然做着相关行业的工作,但总觉得对于基础的掌握并没有相关专业学者扎实,正好因为辞职待业等原因,还是 ...

  5. mycat权威指南阅读笔记--序言1

    前言 mycat官方地址http://www.mycat.io/,mycat是关系数据库的中间件,也就是说它可以把后端的多个数据库,抽象成一个关系数据库. mycat能干啥 官方文档介绍,主要是用来做 ...

  6. Kafka权威指南 读书笔记之(五)深入Kafka

    集中讨论以下3 个有意思的话题 :• Kafka 如何进行复制:• Kafka 如何处理来自生产者和消费者的请求 :• Kafka 的存储细节,比如文件格式和索引. 集群成员关系 Kafka 使用 Z ...

  7. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  8. Kafka权威指南 读书笔记之(三)Kafka 生产者一一向 Kafka 写入数据

    不管是把 Kafka 作为消息队列.消息总线还是数据存储平台来使用 ,总是需要有一个可以往 Kafka 写入数据的生产者和一个从 Kafka 读取数据的消费者,或者一个兼具两种角色的应用程序. 开发者 ...

  9. Kafka权威指南 读书笔记之(一)初识Kafka

    发布与订阅消息系统 数据(消息)的发送者(发布者)不会直接把消息发送给接收者,这是发布与订阅消息系统的一个特点.发布者以某种方式对消息进行分类,接收者(订阅者)订阅它们, 以便接收特定类型的消息.发布 ...

随机推荐

  1. java数据结构——栈(Stack)

    学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...

  2. 在wxml中直接写js代码(wxs)

    我们在h5开发中,很多时候要在html中写到js代码,这个很容易实现.但是在微信小程序开发中,是不能直接在wxml中写js代码的,因此就有了wxs.在wxml中用wxs代码,有以下几种方式(在小程序文 ...

  3. 学习WEBAPI第一天

    目录 WebApi: 通过操作对象来实现操作标签的目的 一.DOM 中常用的操作 二.doucument对象 三.获取元素 四.注册事件 五.操作元素的属性 六.当页面加载完时,script代码已经执 ...

  4. svn报错Item is not readable svn解决方案

    解决: 配置目录权限时如: [/]tangtx=rwyangcx=rwweishq=rw 结果组用户分别在根目录下可以正常show log,而在其子目录中show log都会提示 Item is no ...

  5. 根据vue-cli手摸手实现一个自己的脚手架

    故事背景 身为一个入门前端七个月的小菜鸡,在我入门前端的第一天就接触到了vue,并且死皮赖脸的跟他打了这么久的交到,还记得第一次用vue init webpack 这句命令一下生成一个模板的时候那种心 ...

  6. Ansible配置详解

    目录 Ansible配置详解 参考 配置优先级 配置参数说明 Ansible配置详解

  7. Forest plot(森林图) | Cox生存分析可视化

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/2W1W-8JKTM4S4nml3VF51w 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...

  8. 设计时数据源:在PostgreSql 数据查询中使用参数过滤

    在上一篇文章中,我们学习了如何设计时连接PostgreSQL 数据库及环境搭建.本节我们来学习使用PostgreSql 数据源时,创建数据集时带参数过滤的查询语句写法. 在报表中包含两种参数,可参考博 ...

  9. java的日期时间处理(待更新)

    1. /*      * 将时间转换为时间戳      */        public static String dateToStamp(String s) throws ParseExcepti ...

  10. Java8 Stream性能如何及评测工具推荐

    作为技术人员,学习新知识是基本功课.有些知识是不得不学,有些知识是学了之后如虎添翼,Java8的Stream就是兼具两者的知识.不学看不懂,学了写起代码来如虎添翼. 在上篇<Java8 Stre ...