• 【消息队列】MQ02——Kafka


    字节跳动,青训营社区课程,2h

    如何使用Kafka

    一、是什么

    基本概念

    • Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue)

    • Kafka:分布式时间流平台,用于高性能数据管道、流分析、数据集成、关键任务应用

    • MQ的两种模式

      • (1)点对点模式:producer往MQ写入数据,consumer去MQ中消费,消费完后,给MQ一个状态,MQ根据这个状态delete 消息
      • (2)发布/订阅模式
        consumer订阅MQ中的某个topic。
        consumer消费后,MQ不删除消息。
        每个消费者互相独立,都可以消费topic中的消息。
        Fig1

    Kafka的基础架构

    • topic切分成不同分区
    • consumer可以多个,分组
    • 每个partition增加副本,leader和follower
    • zk的使用,正在被淘汰
      Fig2
      Java:producer和consumer
      scalar:broker

    2. Kafka的安装

    3. Kafka的Producer

    发送流程

    main线程:producer
    Interceptor:
    Searilizer:序列化数据
    分区器:决定数据放到那个DQueue,都是在内存完成。
    RecordAccumulator:在内存中,使用的内存池(双端队列)
    batch.size:默认16k
    linger.ms:

    当selector接收到broker的应答acks时,如果是成功的会清理缓存的请求以及Dqueue中的producerbatch

    如果失败就会一直尝试
    Fig3

    异步发送

    Fig4

    同步发送

    生产者分区

    (1)合理使用存储资源
    (2)提高并行度

    (1)kafka高吞吐、稳定性

    • producer:批量发送、数据压缩
    • borker:顺序写、消息索引、零拷贝
    • consumer:rebalance机制

    (2)kafaka的缺点:

    缺点

    others:

    使用步骤

    • 创建集群
    • 新增topic
    • 编写生产者逻辑
    • 编写消费者逻辑

    一个topic对应着不同的分区(parition)
    Fig1

    Fig2

    Fig3
    ISR- In Sync Replicas:当Follower与Leader差距很大,就会提出ISR,Leader Replica将会从ISR中选出,当ISR中的Leader跪掉了,就从ISR中选出Follower

    Broker中的Controller他是老大,负责管理topic的paritition
    Fig4

    producer发送消息

    1条消息发送给broker,broker返回succ()

    改进:batch、压缩
    Fig5

    broker的消息结构

    .idex就是offset
    Fig6

    Broker顺序写,减少磁盘寻道时间;

    consumer向broker发送featchRequest,broker内部寻找消息?

    Broker零拷贝

    从磁盘读取数据,直接发送网卡,不需要进过状态的切换。
    Fig7

    consumer-消息的接收端

    consumer和parition的分配问题(手动 or 自动)

    low-level

    high-level

    引入coordinator实现自动分片。coordinator负责
    Fig
    consumer自动分配
    Fig

    Kafka问题总结

    1. 运维成本高
    2. 对于负载不均衡的场景,解决方案复杂
    3. 没有自己的缓存,完全依赖Page Cache
    4. Controller和Coordinator和Broker在同一进程中,大量的IO会造成性能下降。
  • 相关阅读:
    大模型时代的PDF解析工具
    Java 设计模式——访问者模式
    电脑怎么提取图片中的文字?
    内链外链抓取生成sitemap和主动推送的技巧
    再见 Xshell 这款开源的终端工具逼格更高
    对于await阻塞的理解
    我用GPT搭建了一个虚拟女友!
    【建议背诵】软考高项考试案例简答题汇总~(6)
    基于Python实现的英文文本信息检索系统
    如何精准识别主数据?
  • 原文地址:https://blog.csdn.net/Alearn_/article/details/125000037