首页 > 其他分享 >Kafka的分布式架构与高可用性

Kafka的分布式架构与高可用性

时间:2023-10-08 10:55:34浏览次数:44  
标签:副本 Kafka 故障 高可用性 集群 节点 分布式

导语

一开始我们就说过Kafka是一款开源的高吞吐、分布式的消息队列系统,那么今天我们就来说下它的分布式架构和高可用性以及双/多中心部署。

Kafka 体系架构简介

以下是 Kafka 的软件架构,整个 Kafka 体系结构由 Producer、Consumer、Broker、ZooKeeper 组成。Broker 又由 Topic、分区、副本组成。

详细可以参考 Kafka 官方文档,Kafka introduction

分布式与高可用

Kafka通过其分布式架构来实现高可用性。以下是Kafka分布式架构与高可用性之间的关系:

  1. 分布式数据存储:Kafka的主题被分为多个分区,每个分区都可以有多个副本。这些副本可以分布在不同的Broker节点上,形成分布式的数据存储。这种分布式存储使得数据在多个节点上冗余存储,即使某个节点发生故障,其他副本仍然可用,保证了数据的高可用性。

  2. 冗余备份:Kafka中的每个分区都可以配置多个副本,这些副本被分布在不同的Broker节点上。当一个Broker节点发生故障时,其他副本可以接管该分区并继续提供服务。这种冗余备份机制保证了即使多个节点发生故障,系统仍然可以继续工作,避免了单点故障,提高了可用性。

  3. ISR机制:Kafka使用ISR(In-Sync Replicas)机制来保证数据的可靠性和一致性。ISR是指与Leader副本保持同步的副本集合。当消息被写入Leader副本后,必须等待ISR中的所有副本完成写入操作,才会返回确认给生产者。这样可以保证消息的复制和同步,提高数据的可靠性和一致性。

  4. 动态的故障转移:Kafka具备自动故障转移能力。当一个Broker节点发生故障时,ISR中的其他副本会参与到Leader选举过程中,自动选举新的Leader副本,并进行分区重平衡。这样可以快速恢复系统的可用性,保证生产者和消费者能够无缝地继续工作。

  5. 水平扩展:Kafka的分布式架构支持水平扩展。通过增加更多的Broker节点,可以扩展Kafka集群的吞吐量和容量。水平扩展提高了系统的伸缩性,使得Kafka能够处理大规模的数据流和高并发的读写请求。

  6. 多中心数据互为灾备:即一般为了避免天灾人祸大型项目都会在不同地域部署相同的数据数据中心,彼此之间互为灾备。

多中心相关术语

  • RTO(Recovery Time Objective):即数据恢复时间目标。指如果发生故障,发生故障转移时业务系统所能容忍的最长停止服务时间。如果需要 RTO 越低,就越要避免手工操作,只有自动化故障转移才能实现比较低的 RTO。

  • RPO(Recovery Point Objective):即数据恢复点目标。指如果发生故障,故障转移需要从数据历史记录中的哪个点恢复。换句话说,有多少数据会在故障期间丢失。

  • 灾难恢复(Disaster Recovery): 涵盖所有允许应用程序从灾难中恢复的体系结构、实现、工具、策略和过程的总称,在本文档的上下文中,是指整个区域故障。

  • 高可用性(High Availability): 一个高度可用的系统即使在出现故障的情况下也可以连续运行。在多区域架构的上下文中,高可用性应用程序即使在整个区域故障期间也可以运行。HA 应用程序具有灾难恢复策略。

发生故障的场景

不论是在虚拟化或容器化架构下,还是在提供成熟服务的云厂商上,但都有可能因为各种因素发生局部和系统故障,因此就需要考虑整体系统容灾能力及可用性。

下面列出一些典型的故障场景

序号 故障场景 影响 缓解措施
1 单节点故障 单个节点或托管在该节点上的 VM 的功能丧失 集群部署
2 机架或交换机故障 该机架内托管的所有节点/虚拟机(和/或连接)丢失 集群部署分布在多个机架和/或网络故障域中
3 DC/DC-机房故障 在该 DC/DC 机房内托管的所有节点/虚拟机(和/或连接)丢失 扩展集群、复制部署
4 区域故障 该区域内托管的所有节点/虚拟机(和/或连接)丢失 地理延伸集群(延迟相关)和/或复制部署
5 全球性系统性中断(D​​NS 故障、路由故障等) 影响客户和员工的所有系统和服务完全中断 离线备份;第三方域中的副本
6 人为行为(无意或恶意) 在检测之前,人为行为可能会破坏数据和任何同步副本的可用性 离线备份

这篇文章重点围绕故障场景2、3、4说明 Kafka 中有哪些方案来应对这几类故障场景。第1种单节点故障,Kafka 集群高可用可以应对;第5、6种故障可以考虑将数据存储到第三方系统,如果在云上可以转储到 COS。

双/多中心的应用场景

  • 跨地域复制
    在项目比较大的时候,可能需要在多个地域部署中心服务,以增加系统的容灾能力和业务能力,每个数据中心都有自己的 Kafka 集群,这里就涉及到应用和Kafka集群之间的访问,是本地访问还是跨中心访问。

  • 灾备
    任何集群服务都会收到天灾、人祸等因素影响稳定性,比如地震,火灾,高温、超低温等等,Kafka 集群可能因为这些不可预估的原因导致不可用,这时就需要有另外的与第一个集群完全相同的集群。如果有任何一个集群出现不可用情况,其他中心可以及时顶上,也就是所谓的互为灾备。

  • 集群的物理隔离
    多环境设置,数据隔离部署。

  • 云迁移和混合云部署
    在云计算流行的今天,部分公司会将业务同时部署在本地 IDC 和云端。本地 IDC 和每个云服务区域可能都会有 Kafka 集群,应用程序会在这些 Kafka 集群之间传输数据。例如,云端部署了一个应用,它需要访问 IDC 里的数据,IDC 里的应用程序负责更新这个数据,并保存在本地的数据库中。可以捕获这些数据变更,然后保存在 IDC 的 Kafka 集群中,然后再镜像到云端的 Kafka 集群中,让云端的应用程序可以访问这些数据。这样既有助于控制跨数据中心的流量成本,也有助于提高流量的监管合规性和安全性。

  • 法律和法规要求
    见题知意。

跨数据中心Kafka的部署形态

一般来说,Kafka 跨数据中心部署大体分两种形态:Stretched Cluster和Connected Cluster。

Stretched Cluster

延展集群,它本质上是单个集群,是使用Kafka内置的复制机制来保持broker副本的同步。通过配置min.insync.replicas和acks=all,可以确保每次写入消息时都可以收到至少来自两个数据中心的确认。

Connected Cluster

连接集群,一般通过异步复制完成多地域复制,并且使用外部工具将数据从一个(或多个)集群复制到另一个集群。该工具中会有Kafka消费者从源集群消费数据,然后利用Kafka生产者将数据生产到目的集群。但Confluent提供了一种不使用外部工具实现此功能的连接集群,在下面介绍商业化方案的时候再详细说明。

下面是这两种部署形态的对比

部署形态 数据传输方式 Offset 保留 延迟 RTO&RPO 何时使用
Stretched Cluster 同步 可以 0 数据中心距离较短
Connected Cluster 异步 可以 取决于网络 >0 数据中心较远

以这两种部署形态可以形成多种部署方式,有兴趣的朋友可以深入研究下。

标签:副本,Kafka,故障,高可用性,集群,节点,分布式
From: https://www.cnblogs.com/dc-s/p/17748367.html

相关文章

  • Redis分布式锁
    简述利用Redis的Setnx命令,来实现一个分布式的加锁方案。利用注解,在拥有该注解的方法上,进行切面处理,在方法执行前,进行加锁,执行结束后,根据是否自动释放锁,进行解锁。将该注解用在定时任务的方法上,即可实现分布式定时任务,即获取到锁的方法,才会执行。1redis命令1.1setnx命令Re......
  • Mysql 分布式序列算法
    接上文Mysql分库分表1.分布式序列简介在分布式系统下,怎么保证ID的生成满足以上需求?ShardingJDBC支持以上两种算法自动生成ID。这里,使用ShardingJDBC让主键ID以雪花算法进行生成,首先配置数据库,因为默认的注解id是int类型,装不下64位,需要进行修改:#在本地和远端服务器数据......
  • 分布式系统笔记目录
    分布式系统笔记目录本目录源自我校的分布式系统课程,我觉得很有趣,就制作了笔记并分享老师的笔记的目录结构感觉还是有些问题,但是当时学习时间比较紧,就没来得及排版仅供学习使用第一章:基本概念分布式系统相关概念、与并行计算的关系、云计算概念、分布式计算的背景、目的......
  • Kafka不能满足我们的要求,其尤其表现在低延迟和高可靠性方面
    为什么选择RocketMQ|RocketMQhttps://rocketmq.apache.org/zh/docs/为什么RocketMQ​在阿里孕育RocketMQ的雏形时期,我们将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着我们的贸易业务吞吐量的上升,源自我们的消息传递集群的压力也变得紧迫。根据我们......
  • kafka常用命令
    1、启动Kafka./bin/kafka-server-start.sh./config/server.properties&2、停止Kafka./bin/kafka-server-stop.sh3、创建Topic#通过zookepper./bin/kafka-topics.sh--create--zookeeper192.168.209.102:2181--partitions3--replication-factor2--topictest#......
  • 关于分布式操作系统
    关于分布式操作系统,如果你不太理解的话,可以把它看成是传统操作系统延展。二者的区别在于,传统的操作系统都是单机系统,只能在一台计算机上运行,而分布式操作系统是多机系统,每台计算机都是系统中的一个计算单元,在此基础形成建立网络连接,统一输入输出,形成一个巨大的物理分布逻辑统一的......
  • Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本文是《StrimziKafkaBridge(桥接)实战》的第三篇,前文咱们掌握了StrimziKafkaBridge的基本功能:基于http提供各种kafka消息的服务此刻,如果想通过http接口调......
  • yisa_get_msg_from_kafka_per_pn.py
      #!/usr/bin/python#-*-coding:utf-8-*-#抽取kafka数据到redis_mq模块#作者:王成#日期:2017-04-14importMySQLdbimporttimeimportsysimportredisimportrequestsimportjsonimportyaml,loggingfromlogging.handlersimportTimedRotatingFileHandler,......
  • Redis分布式锁演进架构
    【一】引言分布式锁相信大家一定不会陌生,想要用好或者自己写一个却没那么简单。想要达到上述的条件,一定要掌握分布式锁的应用场景,以及分布式锁的不同实现,不同实现之间有什么区别。【二】分布式锁场景如果想真正了解分布式锁,需要结合一定场景;举个例子,某夕夕上抢购AirPod......
  • Redis学习之分布式全局id生成
    介绍为什么需要分布式全局ID生成器?对于订单这种数据,数据库自增的规律性太明显,会暴露一些信息(比如根据昨日和今日的订单号差值看出销量)数据量过大时,不同表的id分别自增,容易出现id冲突分布式全局ID生成应满足的特点:唯一:整个系统每个id都是唯一的递增......