当前位置: 首页 > news >正文

Kafka06-基础-尚硅谷

2-Kafka基础

文章目录

    • 2-Kafka基础
    • @[toc]
      • 2.1 Kafka简介
        • 2.1.1 Kafka借鉴了JMS规范的思想,但并未完全遵循JMS规范
        • 2.1.2 Kafka的应用场景
      • 2.2 Kafka集群部署
        • 2.2.1 集群部署概述
        • 2.2.2 解压文件
        • 2.2.3 安装ZooKeeper
        • 2.2.4 安装Kafka
        • 2.2.5 封装启动脚本
      • 2.3 Kafka核心组件
        • 2.3.1 代理:Broker
        • 2.3.2 控制器:Controller
        • 2.3.3 主题:Topic
        • 2.3.4 分区:Partition
        • 2.3.5 副本:Replication
        • 2.3.6 日志:Log
      • 2.4 创建主题
        • 2.4.1 创建主题的方式
        • 2.4.2 创建第一个主题
        • 2.4.3 创建第二个主题
        • 2.4.4 创建第三个主题
        • 2.4.5 创建主题流程
      • 2.5 生产消息
        • 2.5.1 生产消息的基本步骤
        • 2.5.2 生产消息的基本代码
        • 2.5.3 发送消息
        • 2.5.4 消息分区
        • 2.5.5 消息可靠性
        • 2.5.6 消息去重与有序
      • 2.6 存储消息
        • 2.6.1 存储组件
        • 2.6.2 数据存储流程
        • 2.6.3 存储文件格式
        • 2.6.4 数据刷写
        • 2.6.5 副本同步
        • 2.6.6 数据一致性
      • 2.7 消费消息
        • 2.7.1 消费消息的基本步骤
        • 2.7.2 消费消息的基本代码
        • 2.7.3 消费消息的基本原理

2.1 Kafka简介

2.1.1 Kafka借鉴了JMS规范的思想,但并未完全遵循JMS规范

Kafka借鉴了JMS规范的思想,但并未完全遵循JMS规范,其内部有很多用于数据传输的组件对象,这些组件对象组合在一起实现高效的数据传输。

2.1.2 Kafka的应用场景

Kafka最初的应用场景是日志场景或MQ场景,扮演着日志传输和存储系统的角色。

2.2 Kafka集群部署

2.2.1 集群部署概述

生产环境通常采用Linux系统搭建服务器集群,但为了学习Kafka的基础概念和核心组件,可以搭建一个简单易用的Windows集群。

2.2.2 解压文件
  • 在磁盘根目录创建文件夹cluster,文件夹名称不要太长。
  • 将Kafka安装包kafka-3.6.1-src.tgz解压缩到kafka文件夹。
2.2.3 安装ZooKeeper
  • 将解压缩的文件作为ZooKeeper软件使用,修改文件夹名为kafka-zookeeper
  • 修改config/zookeeper.properties文件,配置数据存储目录、端口号等参数。
2.2.4 安装Kafka
  • 将解压缩的文件复制多份,分别改名为kafka-node-1kafka-node-2kafka-node-3等。
  • 修改每个节点的config/server.properties配置文件,设置不同的broker.id、端口号、数据存储目录等参数。
2.2.5 封装启动脚本
  • 创建批处理文件zk.cmdkfk.cmd,分别用于启动ZooKeeper和Kafka节点。
  • 创建cluster.cmd批处理文件,用于启动整个Kafka集群。
  • 创建cluster-clear.cmd批处理文件,用于清理和重置Kafka数据。

2.3 Kafka核心组件

2.3.1 代理:Broker
  • Kafka服务进程称为Kafka Broker或Kafka Server。
  • 在Kafka集群中,每个服务节点都是一个Broker,每个Broker都有一个唯一的全局ID,称为broker.id
2.3.2 控制器:Controller
  • Kafka采用主从架构,从多个Broker中选举一个作为Controller,负责管理和协调整个Kafka集群。
  • Controller的基本功能包括Broker管理、Topic管理、Partition管理、数据服务等。
  • 如果Controller节点出现故障,Kafka会依托于ZooKeeper选举其他节点作为新的Controller,实现高可用。
2.3.3 主题:Topic
  • Topic是Kafka中消息的逻辑分类,生产者将消息发送到某个Topic,消费者从某个Topic中获取消息。
  • Kafka集群中可以存放多个Topic的消息数据。
2.3.4 分区:Partition
  • 为了解决单一Topic的负载问题,Kafka将Topic从物理上分成多个Partition,每个Partition是一个有序的队列。
  • 每个Partition用一个编号进行标记,从0开始的连续整数。
  • Partition是物理上的概念,以数据文件的方式真实存在。
2.3.5 副本:Replication
  • 为了防止数据丢失,Kafka为每个Partition设置多个副本,称为Replication。
  • 副本分为Leader副本和Follower副本,只有Leader副本才能进行数据的读写,Follower副本只做备份使用。
2.3.6 日志:Log
  • Kafka将接收到的消息数据存储在Log日志文件中,底层存储数据的文件扩展名为.log
  • Topic创建后,会创建对应的Partition数据Log日志,并打开文件连接通道,随时准备写入数据。

2.4 创建主题

2.4.1 创建主题的方式
  • 可以通过命令行、工具、客户端API、自动创建等方式创建主题。
  • 重点介绍命令行方式创建主题。
2.4.2 创建第一个主题
  • 执行指令创建主题,仅指明主题名称,其他参数采用默认值。
  • 创建主题后,会在ZooKeeper中增加相应的节点,记录主题相关配置信息。
  • 主题数据存储在副本所在的Broker节点上。
2.4.3 创建第二个主题
  • 创建主题时,设定分区参数--partitions,参数值为3,表示创建3个分区。
  • 每个分区会均匀分配到不同的Broker节点上。
2.4.4 创建第三个主题
  • 创建主题时,设定副本参数--replication-factor,参数值为3,表示每个分区创建3个副本。
  • 副本会均匀分配到不同的Broker节点上,确保数据的可靠性和可用性。
2.4.5 创建主题流程
  • 命令行提交创建指令,客户端处理指令并校验参数。
  • Controller接收创建主题请求,进行主题创建操作。
  • 在ZooKeeper中创建相应的节点,记录主题配置信息。
  • Controller节点启动后,会在/brokers/topics节点增加监听器,触发相应的功能。

2.5 生产消息

2.5.1 生产消息的基本步骤
  • 创建Map类型的配置对象,增加相应的配置属性,如集群地址、序列化类等。
  • 创建待发送数据,封装为指定的数据模型。
  • 创建生产者对象,发送数据。
  • 关闭生产者连接。
2.5.2 生产消息的基本代码
  • 提供Java代码示例,演示如何使用Kafka Producer API生产数据。
2.5.3 发送消息
  • 拦截器:允许在数据发送前进行统一处理,如校验、整合数据等。
  • 回调方法:用于对数据的发送结果进行处理。
  • 异步发送:生产者将数据放入缓冲区后,无需等待后续发送过程,直接发送下一条数据。
  • 同步发送:生产者将数据放入缓冲区后,需等待数据的后续发送操作的应答状态,才能发送下一条数据。
2.5.4 消息分区
  • 指定分区:在构建数据时,可以指定数据存储的分区编号。
  • 未指定分区:Kafka会根据集群元数据中的主题分区,通过算法计算分区编号。
  • 分区器:可以自定义分区规则,实现Partitioner接口,重写partition方法。
2.5.5 消息可靠性
  • ACK = 0:生产者将数据发送到网络输出流后,Kafka就进行响应,数据可能会丢失。
  • ACK = 1:Leader副本将数据写入日志文件后,Kafka进行响应,数据相对安全。
  • ACK = -1:Leader副本和Follower副本都将数据写入日志文件后,Kafka进行响应,数据非常安全。
2.5.6 消息去重与有序
  • 数据重试:可能导致数据重复和乱序。
  • 数据幂等性:通过配置enable.idempotence=true开启幂等性,确保数据不重复。
  • 数据事务:通过事务功能解决跨会话的幂等性问题,确保数据的一致性。

2.6 存储消息

2.6.1 存储组件
  • KafkaApis:Kafka应用接口组件,用于判断请求类型并选择相应的方法进行处理。
  • ReplicaManager:副本管理器组件,用于提供主题副本的相关功能。
  • Partition:分区对象,包含分区状态变换的监控、分区上下线的处理等功能。
  • UnifiedLog:统一日志管理组件,用于管理数据日志文件的新增、删除等功能。
  • LocalLog:本地日志组件,管理整个分区副本的数据日志文件。
  • LogSegment:文件段组件,对应具体的某一个数据日志文件。
  • LogConfig:日志配置对象,包含常用的数据存储配置参数。
2.6.2 数据存储流程
  • ACKS校验:根据生产者设置的ACKS级别,进行相应的校验。
  • 内部主题校验:确保主题名称不是Kafka的内部主题名称。
  • ACKS应答及副本数量关系校验:确保ISR列表中的副本数量满足要求。
  • 日志文件滚动判断:根据文件大小、时间间隔等条件,判断是否需要滚动生成新的日志文件。
  • 请求数据重复性校验:确保数据不重复。
  • 请求数据序列号校验:确保数据有序。
  • 数据存储:将数据写入日志文件,并更新数据偏移量。
2.6.3 存储文件格式
  • 数据日志文件:以.log作为扩展名,文件名长度为20位长度的数字字符串,表示当前日志文件的第一批数据的基础偏移量。
  • 数据索引文件:保存逻辑偏移量和数据物理存储位置的对应关系,采用稀疏索引。
  • 数据时间索引文件:将时间戳和偏移量对应起来,方便根据时间戳查找数据。
2.6.4 数据刷写
  • Kafka提供了参数进行数据的刷写,如log.flush.interval.messageslog.flush.interval.ms等。
  • 官方不建议通过强制刷写数据到磁盘来保证数据的可靠性,而应通过副本机制来保证。
2.6.5 副本同步
  • 启动数据同步线程:Follower节点启动数据同步线程ReplicaFetcherThread,从Leader副本节点同步数据。
  • 生成数据同步请求:周期地向Leader节点发送FETCH请求,用于从Leader获取数据。
  • 处理数据响应:将Leader返回的分区数据写入数据文件中。
  • 更新数据偏移量:根据Leader返回的偏移量信息,更新自身的偏移量。
2.6.6 数据一致性
  • 高水位(HW)机制:Kafka在不同的副本之间维护了一个水位线的机制,消费者只能读取到水位线以下的数据。
  • HW在副本之间的传递:HW会随着Follower的数据同步操作而不断上涨,确保消费者能访问的数据一致性。
  • ISR(In-Sync Replicas)伸缩:ReplicaManager组件管理ISR,周期性地查看ISR中的副本集合是否需要收缩或扩大,并传播ISR的变更。

2.7 消费消息

2.7.1 消费消息的基本步骤
  • 创建Map类型的配置对象,增加相应的配置属性,如集群地址、反序列化类、消费者组ID等。
  • 创建消费者对象,向Kafka订阅主题消息,并发送请求获取数据。
  • 获取数据对象ConsumerRecord,包含主题名称、分区号、偏移量、时间戳、key、value等数据。
  • 关闭消费者对象,释放资源。
2.7.2 消费消息的基本代码
  • 提供Java代码示例,演示如何使用Kafka Consumer API消费数据。
2.7.3 消费消息的基本原理
  • 消费者组:多个消费者可以组成一个消费者组,共同消费一个主题中的所有数据,提高消费速率。
  • 调度(协调)器Coordinator:负责管理和调度消费者组的成员、状态、分区分配、偏移量等信息。
  • 消费者分配策略Assignor:决定消费者组中的消费者如何分配主题分区,常用的分配策略有轮询分配策略、范围分配策略、粘性分区策略等。
  • 偏移量offset:消费者消费数据的位置,可以通过配置或指定偏移量来控制消费起始位置。
  • 偏移量提交:消费者可以自动或手动提交偏移量,以确保重启后能从正确的位置继续消费。
  • 消费者事务:确保数据消费过程和偏移量提交过程的原子性,避免数据重复消费或丢失。
  • 偏移量的保存:0.90版本之前,偏移量保存在ZooKeeper中;0.90版本之后,偏移量保存在Kafka内部的__consumer_offsets主题中。
  • 消费数据:消费者通过拉取数据的方式从Kafka获取数据,服务端采用零拷贝技术提高数据拉取效率。
http://www.dtcms.com/a/419638.html

相关文章:

  • 百度云建站漳州手机网站建设公司哪家好
  • wordpress语言包编辑关键词排名优化提升培训
  • 系统的传递函数画出零极点图及频率响应和相位响应图
  • 社交网站开发语言企业门户网站属于什么层
  • 怎样做instergram网站营销网站开发需要注意什么
  • 企业官网型网站模板下载wordpress设置用户注册资料
  • 网站分离怎么做网站什么时候做解析
  • flink批处理-有界流和无界流
  • 广州pc网站建设常德网站建设案例展示
  • 机器学习小白快速入门
  • 大连 网站制作河南最新消息今天
  • 甘肃做高端网站贵州网站建设 零玖伍壹网络
  • Elasticsearch面试精讲 Day 24:跨集群搜索与联邦查询
  • DevEco Testing全面解析:HarmonyOS测试框架与实战指南
  • 做旅游的网站的目的和意义公司管理系统的设计与实现
  • Removal of Hallucination on Hallucination: Debate-Augmented RAG(ACL 2025)
  • Java EE初阶启程记04---线程的状态
  • java设计模式:工厂方法
  • 保健品手机网站模板搭建英文网站
  • Linux操作系统进入紧急模式(welcome to emergency mode!)
  • k8s的组件概念
  • 为什么要有线程及其生命周期
  • 京东商品评论接口(jingdong.ware.comment.get)技术解析:数据拉取与情感分析优化
  • 县级门户网站建设运营成本广州昨天发生重大新闻
  • Java 调用高德地图Sig签名遇10007 INVALID_USER_SIGNATURE的解决之道
  • 代码式绘图工具--Mermaid
  • 网站营销方式有哪些内容wordpress客户端APP
  • 如何制作网站设计网站认证必须做么
  • 桐庐住房和城乡建设局网站wordpress+中文安装
  • linux网站备份杭州网络排名优化