首页 > 其他分享 >kafka集群架构与原理

kafka集群架构与原理

时间:2024-09-24 12:23:24浏览次数:7  
标签:副本 架构 消费者 分区 Partition Kafka 集群 消息 kafka

前言

        这次我们从消息队列开始讨论。生产者-消费者模型中间需要一个消息队列,以存储生产者的产品。对传统的消息队列来说,它支持点对点(P2P)和发布/订阅(Pub/Sub)两种消息模型。在点对点模型中,消息被发送到一个队列,并且只有一个消费者可以消费该消息。在发布/订阅模型中,消息被发布到一个主题,可以有多个订阅者消费。通常将消息存储在内存或数据库中,可能不具备持久化或只有有限的持久化能力。消息队列能够达到生产者与消费者服务解耦的效果。

        而kafka是一种消息队列系统。主要使用发布/订阅模型,但通过消费者组(Consumer Group)的概念,也可以实现类似点对点的消息消费模式。在 Kafka 中,同一个消费者组内的消费者会协调消费同一个分区的消息,确保每个消息在组内只被消费一次。设计用于持久化消息到磁盘,支持10万级高吞吐量的数据写入,并且可以配置消息的保留策略。此外,Kafka还支持异步处理,这是它能够实现高吞吐量和高性能的关键特性之一。

集群架构

        Kafka 集群是由多个 Kafka 服务器(称为 Broker)组成的分布式系统,它们共同提供高吞吐量、可扩展性和容错性的消息处理能力。以下是 Kafka 集群的一些关键特点和组成部分:

  • Broker:Kafka 集群由多个 Broker 组成,每个 Broker 是一个独立的 Kafka 服务器实例。Broker 负责维护数据和处理客户端的请求。
  • Topic:Kafka 中的消息分类称为 Topic。一个 Topic 可以分布在多个 Broker 上,以实现数据的分布式存储。
  • Partition:Topic 被分割成多个 Partition,每个 Partition 是一个有序的消息队列。Partition 可以在不同的 Broker 之间进行分配,以实现负载均衡和并行处理。
  • Replication:为了提高数据的可靠性,每个 Partition 都有多个副本(Replica)。其中一个副本是领导者(Leader),负责处理所有的读写请求。其他副本是追随者(Follower),负责复制领导者的数据。
  • Leader Election:如果领导者副本失败,Kafka 会从追随者中选举出一个新的领导者。
  • Producer:生产者是向 Kafka 集群发送消息的客户端。生产者可以将消息发送到特定的 Topic 和 Partition。
  • Consumer:消费者是从 Kafka 集群读取消息的客户端。消费者可以属于一个消费者组(Consumer Group),消费者组内的消费者可以协调消费同一个 Partition 的消息。
  • Consumer Group:消费者组是一组消费者,它们共享订阅的 Topic。Kafka 保证每个消息只被消费者组内的某个消费者消费。所有的消费者都属于某个消费者组。
  • Offset:每个消息在 Partition 中都有一个唯一的 Offset,消费者使用 Offset 来跟踪它们在 Partition 中的位置。不同的Partition中的Offset是独立的,消费者组中的每个消费者都会实时记录自己消费到了哪个Offset,以便出错恢复时从上一个位置继续消费。

原理

工作流程

        Kafka 中消息是以 Topic 进行分类的,生产者生产消息,消费者消费消息,面向的都是同一个 Topic 。 Topic 是逻辑上的概念,而 Partition 是物理上的概念, 每个 Partition 对应于一个 log 文件 ,该 log 文件中存储的就是 Producer 生产的数据。 Producer 生产的数据会不断追加到该 log 文件末端,且每条数据都有自己的 Offset 。 消费者组中的每个消费者,都会实时记录自己消费到了哪个 Offset ,以便出错恢复时,从上次的位置继续消费。

副本原理

         数据只会写入Leader副本,其他副本从Leader副本拉取数据。而消费者读取数据也只会从Leader副本读。Kafka 集群设计了高可用性,即使部分 Broker 失败,集群仍然可以继续处理消息。集群可以通过添加更多的 Broker 来水平扩展,以处理更多的数据和请求。通过副本机制提供容错能力,即使某些 Broker 失败,数据也不会丢失。对于Ledaer的分配,拿TopicA来举例,TopicA分成了两个Partition,如果将其Leader设置在同一个broker上,当这个broker宕机,其他的机器就要选两个新Leader,但是如果将同一Topic的不同Partition的Leader设置在不同的broker,这样即使一个broker宕机也只会重新选一个新Ledaer。所以Ledaer应该尽量分布均匀。

  • 在 Kafka 中,副本分成两类:领导者副本(Leader Replica)和追随者副本(FollowerReplica)。每个分区在创建时都要选举一个副本,称为领导者副本,其余的副本自动称为追随者副本。
  • Kafka 副本机制中的追随者副本是不对外提供服务的,不同于Fastdfs、MongdoDB等。
  • 当领导者副本挂掉了,或领导者副本所在的 Broker 宕机时,Kafka 依托于 ZooKeeper 提供的监控 功能能够实时感知到,并立即开启新一轮的领导者选举,从追随者副本中选一个作为新的领导者。老 Leader 副本重启回来后,只能作为追随者副本加入到集群中。

水平扩展

        kafka得消息组织方式是主题 - 分区 - 消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。分区的作用主要提供负载均衡的能力,能够实现系统的高伸缩性(Scalability)。不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理。这样,当性能不足的时候可以通过添加新的节点机器来增加整体。(特别注意:副本与分区的区别)

分区策略

        Kafka 提供了默认的分区策略,同时也支持你自定义分区策略。 它允许 Kafka 在集群环境中实现数据的分布式存储和并行处理。
  • 轮询策略:最简单的分区策略,Kafka 会按照顺序将消息轮流分配到各个分区上。
  • 随机策略:Kafka 会随机地将消息分配到任意一个分区上。
  • 基于键的分区策略:如果消息带有键(Key),Kafka 会使用这个键来确定消息应该发送到哪个分区。通常,键的哈希值会被用来确定分区号。

数据可靠性保证

        为保证 Producer 发送的数据,能可靠地发送到指定的 Topic , Topic 的每个 Partition 收到 Producer发送的数据后,都需要向 Producer 发送 ACK ( ACKnowledge 确认收到)。如果 Producer 收到 ACK ,就会进行下一轮的发送,否则重新发送数据。

标签:副本,架构,消费者,分区,Partition,Kafka,集群,消息,kafka
From: https://blog.csdn.net/oxygen3000/article/details/142480495

相关文章

  • 架构之道:如何有效控制对象访问权
    架构之道:如何有效控制对象访问权代理架构概述代理模式(ProxyPattern)是一种常用的设计模式,其主要功能是提供一个对象的替代品或占位符,从而控制对该对象的访问。这种模式在软件开发中尤为重要,特别适用于那些创建成本较高或资源受限的对象。作为结构型模式的一种,代理模式通过创建一个......
  • kafka负载均衡迁移(通过kafka eagle)
    在grafana监控中发现kafka的各个节点磁盘不均匀出现这样的情况是因为kafka默认是以文件数作为平衡的条件的。换句话说,kafka不会管一个副本有多大,只会看磁盘中有多少个副本文件。解决方式:1、修改策略,改为按照磁盘大小平衡数据2、手动迁移数据,将磁盘使用率高的节点数据迁移......
  • kafka安装
    新版本支持kraft,并且在后面会彻底抛弃zookeeper二进制包地址https://downloads.apache.org/kafka/解压之后,编辑config/kraft/server.properties文件,改成自己的ip在Kafka安装目录的bin文件夹下执行以下命令生成一个新的集群ID,如果只有1个机器也没关系,windows的命令在windows......
  • 架构设计:系统间通信(17)——服务治理与Dubbo 中篇(分析)
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • 架构设计:系统间通信(19)——MQ:消息协议(上)
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • 架构设计:系统间通信(18)——服务治理与Dubbo 下篇(继续分析)
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • MES精益制造系统解决方案:精益制造管理系统架构、MES系统主要业务功能、MES系统应用价
    MES系统可以解决的问题生产进度失控,交期经常延误,订单或生产计划各工序完成率不能实时了解;人工排产,很难科学、合理、有序生产,设备利用率很低;物料管理失控,存在多领超领、物料配送错误等现象,增加了物料消耗成本;即使上了ERP,生产过程各环节仍然失控,ERP难以发挥应有作用;......
  • 蒙牛工厂智能化改造解决方案:分层联动的信息化+智能化工厂架构、构建智能工厂的物联网
    蒙牛工厂的智能化改造解决方案主要体现在分层联动的信息化+智能化工厂架构以及构建智能工厂的物联网大数据平台两大方面。以下是对这两方面的详细阐述: 一、分层联动的信息化+智能化工厂架构蒙牛工厂的智能化改造采用了分层联动的架构,这一架构主要包括计划层、执行层和控制层......
  • Karmada新版本发布,支持联邦应用跨集群滚动升级
    摘要:本次升级支持联邦应用跨集群滚动升级,使用户版本发布流程更加灵活可控;透明同事karmadactl新增了多项运维能力,提供独特的多集群运维体验。本文分享自华为云社区《Karmadav1.11版本发布!新增应用跨集群滚动升级能力》,作者:云容器大未来。Karmada是开放的多云多集群容器编排引擎......
  • es集群配置
    #指定集群名称3个节点必须一致cluster.name:es-cluster#指定节点名称,每个节点名字唯一node.name:node-1#是否有资格为master节点,默认为truenode.master:true#是否为data节点,默认为truenode.data:true#绑定ip,开启远程访问,可以配置0.0.0.0network.host:0.0.0.0#指定web端口......