首页 > 其他分享 >kafka结构

kafka结构

时间:2024-10-31 09:33:55浏览次数:1  
标签:副本 消费者 分区 kafka Topic 消息 Kafka 结构

  1. 生产者(Producer)

    • 消息生产:生产者是消息的源头,负责创建并发送消息到Kafka的Topic。它将应用程序产生的数据转换为消息格式,并根据一定的策略(如轮询、基于键的哈希等)将消息发送到Topic的不同分区。例如,在一个电商系统中,订单创建服务作为生产者,会将新订单的信息封装成消息发送到“订单Topic”。
    • 分区策略:生产者可以通过自定义分区器(Partitioner)来控制消息发送到哪个分区。如果没有自定义分区器,Kafka默认使用轮询(Round - Robin)的方式将消息均匀地分配到各个分区。例如,若一个Topic有3个分区,生产者会依次将消息发送到这3个分区,以实现负载均衡。同时,基于键的哈希分区策略可以确保具有相同键(Key)的消息被发送到同一个分区,方便后续对关联消息的顺序处理。
    • 异步发送和批量发送:为了提高性能,生产者支持异步发送和批量发送消息。异步发送允许生产者在发送消息后不需要等待确认就可以继续发送下一条消息,这样可以大大提高发送效率。批量发送则是将多条消息收集到一个批次中,当批次大小达到一定阈值或者等待时间超过一定限度时,再一起发送,减少网络开销。
  2. 主题(Topic)和分区(Partition)

    • Topic作为消息分类:Topic是Kafka中的消息分类,类似于数据库中的表或者消息队列中的队列。不同类型的消息可以发送到不同的Topic。例如,在一个社交媒体应用中,可能会有“用户动态Topic”“好友请求Topic”“消息通知Topic”等,用于区分不同类型的消息。
    • 分区的作用:每个Topic可以包含一个或多个分区。分区是实现高吞吐量和可扩展性的关键。消息在分区内是有序存储和消费的,不同分区之间的消息顺序没有严格要求。分区可以分布在不同的服务器(broker)上,这样多个消费者就可以同时从不同的分区读取消息,实现并行处理。例如,一个“日志Topic”有10个分区,就可以有10个消费者同时读取日志消息,大大提高了日志处理的速度。
    • 副本(Replica)机制:为了保证数据的可靠性和高可用性,分区可以有多个副本。副本分布在不同的broker上,其中一个副本是主副本(Leader Replica),其他副本是从副本(Follower Replica)。生产者将消息发送到主副本,主副本负责将消息同步到从副本。消费者只从主副本读取消息。当主副本出现故障时,会从从副本中选举出新的主副本,保证系统的正常运行。
  3. 消费者(Consumer)和消费者组(Consumer Group)

    • 消费者与订阅关系:消费者从Topic中订阅并接收消息,用于后续的业务处理。消费者可以订阅一个或多个Topic。例如,在一个数据处理系统中,消费者可以订阅“数据采集Topic”来获取原始数据,然后进行清洗、分析等处理。
    • 消费者组的协调机制:消费者组是一组共同消费一个或多个Topic的消费者。同一消费者组内的消费者会协调工作,共同分担消息的消费任务。Kafka会根据消费者组内消费者的数量和Topic的分区数量进行分区分配,保证每个消息在一个消费者组内只会被一个消费者消费一次。不同消费者组之间则是相互独立的,可以重复消费相同的消息。例如,一个“用户行为分析Topic”可以被“用户行为实时监控消费者组”和“用户行为数据存储消费者组”同时订阅,这两个消费者组独立地从Topic中获取消息进行不同的业务处理。
  4. Kafka Broker(服务器)

    • 存储和管理功能:Kafka Broker是Kafka系统的核心服务器,负责存储消息、处理生产者和消费者的请求。它将消息存储在本地磁盘上,以分区为单位进行管理。每个Broker可以存储多个Topic的分区和副本。例如,一个Kafka集群中有3个Broker,它们共同存储了多个Topic的分区和副本,通过合理的分布和协调,实现高效的消息存储和处理。
    • 集群协调和负载均衡:在Kafka集群中,Brokers之间会相互协调,实现负载均衡和高可用性。例如,当新的Broker加入或者现有Broker出现故障时,集群会自动进行分区的重新分配,确保每个Broker的负载相对均衡,并且保证数据的可用性。同时,Brokers之间会通过Zookeeper(在早期版本中)或者Kafka内置的元数据管理机制(在新版本中)来维护集群的元数据信息,如Topic的信息、分区的分配情况、消费者组的状态等。







Q: 3个不同的消费者组订阅同一个Topic ,这3个消费者组都会收到消息吗?
S:

  1. 消费者组与消息接收机制

    • 当3个不同的消费者组订阅同一个Topic时,每个消费者组都会独立地接收这个Topic中的消息。这是因为在Kafka的设计中,消费者组是相互独立的单元,用于划分不同的消息消费逻辑和负载分配。
    • 例如,假设有一个名为“交易记录Topic”(transaction - records - topic),消费者组A(Group - IDtransaction - monitor - group - A)用于实时监控交易是否异常,消费者组B(Group - IDtransaction - analytics - group - B)用于对交易数据进行统计分析,消费者组C(Group - IDtransaction - archive - group - C)用于将交易记录归档存储。这3个消费者组都会从“交易记录Topic”接收消息,并且各自按照自己的业务逻辑对消息进行处理。
  2. 消息消费顺序与偏移量管理

    • 每个消费者组在消费同一个Topic的消息时,会独立地管理自己的消费偏移量(offset)。消费偏移量记录了消费者组在Topic分区中的消费位置。
    • 不同消费者组可以从不同的位置开始消费消息,也可以按照不同的速度进行消费。例如,消费者组A可能因为实时性要求高,会快速地从Topic的起始位置消费消息,而消费者组C因为主要是进行归档存储,可能会按照自己的节奏从Topic的某个中间位置开始消费,并且消费速度相对较慢。每个消费者组的消费顺序和进度是由自己决定的,不受其他消费者组的影响。
  3. 分区分配与并行消费

    • 对于Topic的每个分区,3个消费者组的消费者可以同时进行消费。例如,如果“交易记录Topic”有5个分区,消费者组A可能有3个消费者,消费者组B有2个消费者,消费者组C有4个消费者。每个消费者组会根据自己组内消费者的数量和分区数量进行分区分配,然后各自在分配到的分区上进行消息消费。
    • 这种并行消费的方式使得不同的业务需求可以同时从同一个Topic获取消息,提高了系统的整体效率和灵活性,并且能够充分利用Kafka的分区机制来实现高吞吐量的消息处理。

标签:副本,消费者,分区,kafka,Topic,消息,Kafka,结构
From: https://www.cnblogs.com/lovedaodao/p/18516992

相关文章

  • 【数据结构多彩画卷】不要只会普通的二叉树了 , 你听说过用二叉树来排序吗? 【二叉搜索
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 循环结构程序设计(2)——for语句
    1.基本结构for语句是循环控制程序中相当好用的一种循环控制语句(我是很喜欢用的),特别适合用于已知循环次数的情况。它的一般格式为:for(表达式1;表达式2;表达式3;)  语句;其中for语句的要求如下:for语句后面的括号()不能省略表达式1:一般为赋值表达式,用于给循环控制变量赋初......
  • 循环结构程序设计(1)——while语句和do-while语句
    一、while语句1.基本格式  while语句是当型循环控制语句,一般格式为:while(表达式)  语句;其中while语句的要求如下:while后面的括号不能省略while后面的表达式可以是任意类型的表达式,但是一般是条件表达式或逻辑表达式,用于控制循环语句部分称为循环体,当需要执行多......
  • 数据结构之你就背吧!(更新中)
    数据的逻辑结构在存储器中的映象有哪几种方法?顺序映象非顺序映象算法的性质及解释?有穷性:步骤或规则是有限的,在有穷步后结束。确定性:每条规则或指令无二义性;算法执行路径唯一(相同输入只能得到相同输出)。可行性:每个计算步骤能在有限时间内完成。输入:有一个或多个外部输......
  • 【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式
    在现代分布式系统中,管理跨多个服务的长事务至关重要。传统的分布式事务解决方案往往面临性能瓶颈和复杂性问题,而Saga模式作为一种灵活高效的解决方案,逐渐受到开发者的青睐。本文将探讨如何利用SpringBoot和Kafka实现Saga模式,并详细介绍事务补偿机制,帮助你构建稳定......
  • 不使用docker-compose不使用zookeeper启动ApacheKafka3.8.0单机运行KRAFT模式
    dockerrun-d-v/kafka_data:/opt/kafka-logs-eKAFKA_ENABLE_KRAFT=yes-eKAFKA_PROCESS_ROLES=broker,controller-eKAFKANODEID=1-eKAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093-eKAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.1......
  • 条件编译、多文件编程、结构体
    条件编译条件编译可以在编译的时候从几组语句中选择一组编译而忽略其他组,#ifdef/#ifndef...#else...#endif这个结构可以根据一个宏名称是否被定义过从两组语句中选择一组编译,最开始的预处理指令都应该从两个里选择一个,不论选择哪一个都应该在后面写一个宏名称。如果最开始的......
  • 14 数据结构
    算法数据存在内存的格式是什莫?数据最好是结构化的,方便读取,所以有了数据结构。1.数组(列表,向量),数组的值一个个连续存在内存里,可以把多个值存在数组变量里2.数组的亲戚是字符串,就是字母,标点符号,数字组成的数组3.多个变量打包到一起叫做结构体,4.一个结构体叫做节点,存一个变量......
  • 数据结构实验2——表的应用
    一、实验目的掌握单链表的基本算法设计。二、实验内容1、实现单链表各种基本运算的算法。2、在main()函数中,调用头插法(CreateListF()函数)和尾插法(CreateListR()函数),创建新链表,并输出结果进行比较。3、对任务1或者2中创建的某一个单链表{A1,B1,A2,B2,...,An,Bn},编写一个算......
  • 项目结构和规范
    当然可以!以下是将您提供的内容重新组织和格式化后的版本,使其更易于阅读和理解:项目结构node_modules:项目依赖的包所在的目录public:存放favicon图标和HTML根模板src:项目代码目录api:请求接口配置assets:图片、字体等静态资源目录components:全局组件icons:......