【Kafka】知识点(一)Kafka基础

【Kafka】知识点(一)Kafka基础,第1张

【Kafka】知识点(一)Kafka基础 前言

如果在业务中,高并发的写请求特别多,应该怎么办?

 高并发的读请求多的时候,引入MQ消息队列来解决高并发的写请求问题。

在这里我们用Kafka来解决这一个问题。

目录

前言

一、Kafka是什么?

二、Producer、Broker、Consumer

三、Topic、Partition

四、分区副本机制

五、Segment

六、Offset

七、总结




一、Kafka是什么?
  • 功能

    • 分布式流式数据实时存储:分布式存储

      • 实时消息队列存储,工作中主要使用的功能

    • 分布式流式计算:分布式计算:KafkaStream

      • 这个功能一般不用,工作中用流式计算:Spark | Flink

  • 定义

    • 分布式的基于订阅发布模式的高吞吐高性能的实时消息队列系统

  • 应用场景

    • 目前:只要做实时大数据,都必用Kafka

      • 离线数据仓库:Hive

      • 实时数据仓库:Kafka

    • Kafka生产者:数据采集的工具

      • Flume、Canal、OGG

    • Kafka消费者:实时计算的程序

      • Spark StructStreaming、Flink

  • 特点

    • 高性能:实时的对数据进行实时读写

      • 快:基于内存存储、Zero Copy机制、顺序写磁盘

    • 高并发:分布式并行读写

      • 分布式主从架构

    • 高吞吐:使用分布式磁盘存储

      • 使用磁盘进行数据持久化

    • 高可靠:分布式主从架构

    • 高安全性:数据安全保障机制

      • 副本机制

    • 高灵活性:根据需求,随意添加生产者和消费者

      • 异步架构

二、Producer、Broker、Consumer

  • Broker:Kafka是一个分布式集群,多台机器构成,每台Kafka的节点就是一个Broker

  • Producer:生产者

    • 负责将数据写入Kafka中,工作中一般生成都是数据采集工具

    • 本质:Kafka写入数据的客户端

    • Kafka的每条数据格式:KV格式

  • Consumer:消费者

    • 负责从Kafka中消费数据

    • 本质:Kafka读取数据的客户端

    • 消费数据:主要消费的数据是V

  • Consumer Group:Kafka中必须以消费者组的形式从Kafka中消费数据

    • 消费者组到kafka消费数据

    • 任何一个消费者必须属于某一个消费者组

    • 一个消费者组中可以有多个消费者:多个消费者共同并行消费数据,提高消费性能

      • 消费者组中多个消费者消费的数据是不一样的

      • 整个消费者组中所有消费者消费的数据加在一起是一份完整的数据



三、Topic、Partition

路径

  • Topic:数据主题,用于区分不同的数据,对数据进行分类

    • 类似于MySQL中会将数据划分到不同的表:不同的数据存储在不同的表中

    • Kafka是分布式存储:将写入Topic的数据分布式存储在不同的机器上

    • Topic就是分布式的概念:一个Topic可以划分多个分区Partition,每个不同分区存储在不同的Kafka节点上

      • 写入Topic的数据实现分布式存储

    • 问题:生产者写入一条KV结构数据,这条数据写入这个Topic的哪个分区由分区规则来决定,分区规则是什么呢?

      • 有多种分区规则:不同场景对应的分区规则不一样

      • 类似于Map输出一条数据,但是我有多个Reduce,我这条数据最终会进入哪个Reduce?

        • 分区规则:Hash取余

  • Partition:数据分区,用于实现Topic的分布式存储,对Topic的数据进行划分

    • 每个分区可以存储在不同的Kafka节点Broker上

    • 例如上图中:Topic名称为T1,T1有三个分区:P0、P1、P2

    • 写入Topic:根据分区的规则决定写入哪个具体的分区



四、分区副本机制
  • 问题1:Kafka中的每个Topic的每个分区存储在不同的节点上,如果某个节点故障,怎么保证集群正常可用?

    • Kafka选用了副本机制来保证数据的安全性

      • 如果某台机器故障,其他机器还有这个分区的副本,其他机器的副本照样可以对外提供客户端读写

    • Kafka副本机制:每一个分区都可以有多个副本

      • 类似于HDFS的副本机制,一个块(BLOCK)构建多个副本

    • 注意:Kafka中一个分区的副本个数最多只能等于机器的个数,相同分区的副本不允许放在同一台机器,否则如果一个节点挂掉了的话,那么这个分区的数据就会丢失。

  • 问题2:一个分区有多个副本,读写这个分区的数据时候,到底读写哪个分区副本呢?

    • 主从副本机制:Kafka将一个分区的多个副本,划分为两种角色

    • Leader副本:负责对外提供读写

      • 生产者和消费者只对leader副本进行读写

    • Follower副本

      • 与Leader同步数据

      • 如果leader故障,从follower中选举新的leader副本对外提供读写

五、Segment
  • Segment:分区段,Kafka将所有存储的数据落地在文件中

  • 定义:对每个分区的数据进行了更细的划分,先写入的数据会先生成一对Segment文件,存储到一定条件以后,后面数据写入另外一对Segment文件,每个文件就叫Segment文件对

  • 内容:每个Segment对应一对【两个】文件

    • xxxxxxxxx.log:存储数据

    • xxxxxxxxx.index:对应.log的文件的数据索引

  • 设计:为了加快数据检索的效率,将数据按照规则写入不同文件,以后可以根据规则快速的定位数据所在的文件,读取对应的小的segment文件,不用读取所有数据文件

  • 举例

    • 如果分区第一次写入数据,会产生第一个segment

      00000000000000000000000.log
      00000000000000000000000.index
      00000000000000000000000.timeindex
    • 当文件越来越大,存储的数据越来越多,影响读的性能,会再构建一个新的segment,老的segment不再被写入

      00000000000000000000000.log         
      00000000000000000000000.index
      00000000000000000000000.timeindex
      ​
      00000000000000000199999.log
      00000000000000000199999.index
      00000000000000000199999.timeindex
      ​
      00000000000002000000000.log
      00000000000002000000000.index
      00000000000002000000000.timeindex
    • Segment文件的名字就是这个Segment记录的offset的最小值

      • 消费者消费数据是根据offset进行消费的

      • 消费者1:想消费分区1:39999这个offset开始消费

      • 先根据文件文件名来判断我要的offset在哪个文件中

六、Offset
  • 定义:Kafka中所有消费者数据的读取都是按照Offset来读取数据,每条数据在自己分区中的偏移量

    • 写入分区的顺序就是offset偏移量,Offset是分区级别的,每个分区的offset独立管理,都从0开始

    • 消息队列:先进先出

    • 先写入的offset就越小

      • 第一条数据的offset就为0

      • 第二条数据的offset就为1

      • ……

  • 生成:生产者往Kafka中写入数据,写入某个分区

    • 每个分区单独管理一套Offset【分区】,offset从0开始对每条数据进行编号

    • Kafka写入数据也是按照KV来写入数据

      #Kafka中一条数据存储的结构
      offset      Key             Value
  • 功能:基于offset来指定数据的顺序,消费时候按照offset顺序来读取

    • 消费者消费Topic分区中的数据是按照offset进行顺序消费的

    • 怎么保证不丢失不重复:只要保证消费者每次按照offset的顺序消费即可

      • 如果没有Offset

        • 从头取一遍:数据重复

        • 从最新的去:数据丢失

七、总结 Kafka解释HDFSProducer生产者,写入数据到Kafka的Topic写入客户端Consumer消费者,消费Kafka的Topic的Partition数据读取客户端ConsumerGroup消费者组,消费Kafka的TopicBrokerKafka节点HDFS节点Topic逻辑数据分类的对象,类似于数据库或者表的概念,Topic是分布式的,一个Topic可以有多个分区文件Partition分区结构,物理概念,数据按照写入先后顺序写入分区,一个Topic有多个分区,每个分区有多个副本Block块Replication副本机制,通过副本来保证分区数据安全,相同分区的副本不能再同一台机器副本机制Segment对分区的数据进行更细的划分,一个分区的数据存在多个Segment文件中,由两种文件组成.log和.log,为了加快查询的性能-KVKafka中的每条数据都以KV结构存在,V就是存储的数据,K决定分区规则-Offset每条数据在这个分区中的偏移量,分区级别,从0开始,用于消费者进行顺序消费

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5653215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存