AI智能
改变未来

Python工程师的大数据之路(6c)Kafka理论知识

高吞吐的目录

  • 1、基础理论
  • 1.1、什么是消息队列
  • 1.2、消息队列的两种模式
  • 1.3、高可用原理
  • 2、Kafka概述
  • 3、主题和分区
  • 4、数据存储原理
  • 5、数据查找
  • 6、生产数据的可靠性
    • 6.1、应答机制
    • 6.2、领导候选
    • 6.3、数据一致性
    • 6.4、容错机制
  • 附录
  • 1、基础理论

    1.1、什么是消息队列

    • Message Queue
    • 消息的传输过程中保存消息的容器
    • 应用场景:程序解耦、异步消息、流量削锋…

    1.2、消息队列的两种模式

    点对点模式(消费者主动拉取数据,拉取成功后删除队列上的数据)

    一个消息 只能有一个消费者可以消费

    发布/订阅模式(消费者消费数据之后,队列上的数据不会被马上清除)

    1.3、高可用原理

    • High Availability
    • 目标:减少停工时间
    • 策略:消除单点故障

    工作模式

    2、Kafka概述

    • 基于发布/订阅模式分布式消息队列
    • 主用场景:大数据实时处理、流量削峰

    架构图

    英文名 译名 说明
    Producer 生产者 生产消息
    Consumer 消费者 消费消息
    Consumer Group 消费者组 由多个Consumer组成
    是逻辑上的一个订阅者
    Broker 经纪人 一台Kafka服务器就是一个Broker
    一个集群由多个Broker组成
    一个Broker可以容纳多个topic的partition
    Topic 主题 可以理解为一个存放消息的逻辑上的队列
    一个topic可以分布到多个Broker
    Partition 分区 一个topic可以分存多个partition
    每个partition是一个有序的队列
    Replica 复制品 数据副本
    Leader 首领 对接生产者和消费者
    Follower 追随者 实时同步leader的数据
    leader故障时,某follower会成为新的leader

    3、主题和分区

    一个主题下可以有多个分区;分区有序,主题不一定有序

    消费者组是逻辑上的一个订阅者,由多个消费者组成

    各个分区可以被消费者并行消费

    多个消费者组可以订阅同一个主题
    1个消费者可以消费多个分区
    对于1个消费者组,1个分区 只能被 该消费者组内的1个消费者 消费

    建议 某主题的分区数=订阅该主题的消费者组的消费者数

    一台服务器有Broker,一个集群由多个Broker组成

    一个Topic可以分布到多个Broker

    4、数据存储原理

    Kafka将 生产者发送的消息 暂存到硬盘

    下面使用命令查看具体的文件夹和文件

    1、把

    segment

    改小,使得容易产生大量

    segment

    vi $KAFKA_HOME/config/server.properties
    log.segment.bytes=102400

    2、创建分区,两个副本,三个分区

    kafka-topics.sh \\--zookeeper hadoop100:2181/kafka \\--create \\--replication-factor 2 \\--partitions 3 \\--topic topicA

    3、生产数据(Kafka内置的生产者,可用于压测)

    kafka-producer-perf-test.sh --topic topicA \\--num-records 4000 --record-size 1024 \\--producer-props bootstrap.servers=hadoop100:9092 --throughput -1
    参数 说明
    --num-records
    写多少个数据
    --record-size
    每个数据多大(单位:byte)
    --producer-props
    指定数据写到哪个集群
    --throughput
    写数据速率限制,-1表示不限

    4、查看数据目录下名为

    topicA

    的主题

    ls $KAFKA_HOME/logs | grep topicAssh hadoop101 'ls $KAFKA_HOME/logs | grep topicA'ssh hadoop102 'ls $KAFKA_HOME/logs | grep topicA'

    5、查看分区(文件夹)内的文件

    ll topicA-1

    6、查看索引文件以及偏移量(offset)

    kafka-dump-log.sh --print-data-log --files 00000000000000000000.index

    5、数据查找

    6、生产数据的可靠性

    6.1、应答机制

    • ACK
    • 全称:acknowledgement character
    • 译名:命令正确应答
    • 应答等级
      ack=0:Leader接收数据后 应答
      ack=1:Leader接收数据并写入后 应答
      ack=-1:Leader接收和写入数据,Follower同步数据 后应答

    6.2、领导候选

    • ISR
    • 全称:in-sync replica set
    • leader

      同步到一定程度的

      follower
    • 长期没同步的
      follower

      将被踢出

      ISR
    • leader

      挂掉后就从

      ISR

      中选举新

      leader
    kafka-topics.sh --describe --topic topicA --bootstrap-server hadoop100:9092

    查看主题信息,如:分区数、领导者、追随者、Isr……

    6.3、数据一致性

    只能保证副本之间的数据一致性,并不能保证数据不丢失或不重复

    • LEO
      log end offset
      当前日志数据(副本)最后一个偏移量

    • HW
      high watermark
      所有副本的LEO中 最小的那一个

    6.4、容错机制

    容错等级 语义 说明
    at most once 数据最多一条 数据可能会丢,但不会重复
    at least one 数据至少一条 数据绝不会丢,但可能重复
    exactly once 数据有且只有一条 数据不会丢,也不会重复

    如何实现【exactly once】
    1、

    ack=-1

    ,实现数据不会丢
    2、开启幂等性
    3、给消息添加唯一标识【生产者ID、分区号、该分区的数据的偏移量】,据此防止数据重复
    4、生产者不要挂(生产者挂掉重启后,生产者编号可能变)或 固定生产者编号

    附录

    en 🔉 cn
    broker ˈbroʊkər n. 经纪人
    acknowledgement əkˈnɑːlɪdʒmənt n. 承认;确认;感谢
    replica ˈreplɪkə n. 复制品,仿制品;摹本
    bootstrap ˈbuːtstræp n. (靴筒后的)靴襻;[计] 引导程序;vt. 启动(电脑)
    watermark ˈwɔːtərmɑːrk n. 水印;vt. 印水印;(water mark 两单词合体)
    exactly ɪɡˈzæktli adv. 恰好地;精确地;正确地
    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » Python工程师的大数据之路(6c)Kafka理论知识