kafka架构

本文深入探讨Kafka的关键能力,包括发布订阅记录流、存储记录流及实时处理加工流数据。详细介绍Kafka应用场景,如构建实时流数据管道和应用。解析Broker、Topic、Partition等核心概念,以及Producer、Consumer的运作机制。同时,阐述四大核心API和一些基本概念,如Topic和日志、生产者和消费者的特性。
摘要由CSDN通过智能技术生成

1.Kafka概述

1.1 kafka具备三项关键能力

  1. 发布订阅记录流(Record),类似于消息队列(MQ)或者企业级消息系统。
  2. 存储记录流,以一种容错持久化方式。
  3. 实时处理加工流数据。

1.2 kafka的应用场景

  1. 构建实时的流数据管道,可靠的在系统和应用间获取数据。
  2. 构建实时的流数据应用,传输或者处理加工流数据。

1.3 kafka中的核心概念

  1. Broker(中间人或者代理人):一个kafka服务实例。
  2. Topic(主题):某一个类别的记录。
  3. Partition(分区):对主题进行数据分区,一个主题有多个数据分区构成。
  4. Replication(复制):主题主分区中的数据备份,故障恢复。
  5. Leader(主分区):主题的主分区 读写操作默认使用主分区。
  6. Follower(复制分区):同步主分区中的数据(冗余备份),当主分区不可用时,某个follower会自动升级为主分区。
  7. Offset(偏移量):标识读写操作的位置,读offset<=写offset

1.4 kafka的四大核心API

  1. The Producer API:允许应用发布记录流给一个或者多个Topic。
  2. The Consumer API :允许应用订阅一个或者多个主题,并且对主题中新产生的记录进行处理。
  3. The Streams API:允许应用扮演流处理器,消费来自于一个或者多个主题流数据记录,并且将处理的结果输出到一个或者多个主题中,Streams API可以高效的处理传输数据。
  4. The Connector API:连接外部的存储系统。

1.5 kafka中的一些基本概念

1.5.1 Topic和日志

在这里插入图片描述

kafka的一个Topic(主题)在集群内部实际上是有1到N个Partition(分区)构成,每一个Partition都有一个有序的,持续追加的Recode队列,一个Partition是一个Structured commit log(结构化的提交日志)。

Record持久化存放在kafka集群中的,Record会有一个保留周期(通常默认168小时),如果超期,不论Record是否消费,kafka都会丢弃。理论上来说,kafka容量维持在一个合理的范围区间之内(不断产生新数据,不断丢弃过期)

在这里插入图片描述

kafka 中反每一个Record在分区中都有唯一的offser,offset会随着分区不断写入数据有序递增。并且Consumer会保留一个元数据(offset | position,记录了Consumer消费的位置),kafka这种机制为我们提供Record重复处理或者跳过不感兴趣Record处理的功能。

1.5.2 生产者(Producer)

  1. kafka Producer(生产者)是用来产生持续Record,并且发布到kafka某一个或者多个Topic中。
  2. 一个Record是由key value timestamp构成。
  3. 发布Record时的策略:
    1. key=null:轮询Partition.
    2. key!=null:key.hashCode % partitionNum = 存放Record分区的序号
    3. 手动指定Partition序号:Producer一方在发布Record时手动指定要存放的分区序号。

1.5.3 消费者(Consumer)

Kafka Consumer(消费者)订阅一个或者多个感兴趣的Topic,一旦这些Topic中有新的数据产生,会立即拉取到本地(Consumer)一方,进行相应的业务处理。

kafka使用Consumer Group 组织管理Consumer,Consumer Group 特点:组外广播, 组内负载均衡。
在这里插入图片描述

2.Kafka架构

在这里插入图片描述

2.1 工作原理

  1. 首先Producer产生Record发送给指定的Kafka Topic(Topic实质是有多个分区构成,每一个分区都会产生相应的复制分区),在真正存放到kafka集群时会进行计算key.hashCode%topicPartitionNums等于要存放的分区序号。
  2. Leader分区中的数据会自动同步到Follower分区中,Zookeeper会实时监控服务健康信息,一旦发生故障,会立即进行故障转移操作(将一个Follower复制分区自动升级为Leader主分区)
  3. Kafka一个分区实际上是一个有序的RecordQueue(符合队列的数据结构,先进先出),分区中新增的数据,会添加到队列的末尾,在处理时,会从队列的头部开始消费数据。Queue在标识读写操作位置时,会使用一个offset(读的offset<=写的offset)。
  4. 最后Consumer会订阅一个Kafka Topic,一旦Topic中有新的数据产生,Consumser立即拉取最新的记录,进行相应的业务处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值