• kafka从入门到精通1


    博客主页:JavaProfessional
    一个专注于Java的博主,致力于使用通俗易懂的语句讲解内容,期待您的关注!

    概述

    什么是kafka?

    Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统。

    优点

    1. 解耦:Kafka具备消息系统的优点,只要生产者和消费者数据两端遵循接口约束,就可以自行扩展或修改数据处理的业务过程。
    2. 高吞吐量、低延迟:即使在非常廉价的机器上,Kafka也能做到每秒处理几十万条消息,而它的延迟最低只有几毫秒。
    3. 持久性:Kafka可以将消息直接持久化在普通磁盘上,且磁盘读写性能优异。
    4. 扩展性:Kafka集群支持热扩展,Kaka集群启动运行后,用户可以直接向集群添。
    5. 容错性:Kafka会将数据备份到多台服务器节点中,即使Kafka集群中的某一台加新的Kafka服务节点宕机,也不会影响整个系统的功能。

    kafka非常快,并保证零停机和零数据丢失。

    什么是消息系统?

    消息系统的种类

    点对点消息系统

    在这里插入图片描述

    生产者发送消息到消息队列中,一个或多个消费者可以消耗同一个队列中的消息,但是某一条消息只能由一个消费者消费。
    这也就意味着当一条消息被某个消费者消费过后,它将不再存在于消息队列中

    发布订阅消息系统

    在这里插入图片描述

    生产者发送消息到消息队列中,消费者可以订阅一个或多个消息队列,某一消息也可以被多个消费者消费。
    当某一条消息被某个消费者消费过后,这条消息不会被删除,因为也许还有其他消费者仍需消费。

    基础

    kafka的一些概念

    cluster:集群

    整个kafka分布式集群被称为kafka cluster。

    broker

    kafka是一个分布式系统,也就意味着kafka可以多台机器组成一个集群,集群中的每一台服务器是一个broker。broker是一个物理概念。

    topic:主题

    kafka作为一个消息队列系统,是可以创建多个消息队列的,每个消息队列就是一个topic。

    partition:分区

    kafka中Topic被分成多个partition分区。Topic是一个逻辑概念,Partition是最小的物理存储单元,存储着一个topic的部分数据。每个partition都是一个单独的log文件,每条记录都以追加的形式写入。
    在这里插入图片描述

    partition为kafka提供了扩展能力

    在这里插入图片描述

    TopicA = PartitionA + PartitionB + PartitionC

    kafka把topic的多个partition分布在多个broker中。这样做会有很多好处:

    1. 如果把topic放在同一个broker上,那么这个topic的读取写入速度就受限于当前broker的IO速度。但是当把topic拆开,拆成不同的partition,放在不同的broker上时,topic的读取写入速度就取决于平均的IO速度。
    2. 如果把topic放在同一个broker上,那么并行的消费能力就有限。如果把topic拆开,拆成不同的partition,放在不同的broker上,可以支持更多的并行消费。(因为消费者A和消费者B有可能消费的不是同一个partition,而他们又不在同一个broker上,所以互不影响)
    3. 一个 Consumer 可以有多个实例,Partition 分布在多个 Broker 的话,Consumer 的多个实例就可以连接不同的 Broker,大大提升了消息处理能力。可以让一个 Consumer 实例负责一个 Partition,这样消息处理既清晰又高效。

    partition为kafka提供了数据冗余

    Kafka 为一个 Partition 生成多个副本,并且把它们分散在不同的 Broker。

    如果一个 Broker 故障了,Consumer 可以在其他 Broker 上找到 Partition 的副本,继续获取消息。
    在这里插入图片描述

    如上图,无论哪个broker挂掉了,我们都还是能找到A+B+C

    offset:偏移量

    Partition 中的每条记录都会被分配一个唯一的序号,称为 Offset(偏移量)。

    Offset 是一个递增的、不可变的数字,由 Kafka 自动维护。

    当一条记录写入 Partition 的时候,它就被追加到 log 文件的末尾,并被分配一个序号,作为 Offset。
    在这里插入图片描述

    所以,一个 Partition 内部消息有序,一个 Topic 跨 Partition 是无序的。

    好文推荐

    1. 通俗易懂JVM
    2. 为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?
    3. 效率翻倍,这些idea的逆天功能你知道吗?
  • 相关阅读:
    CMap数据库筛选化学药物
    【12. 文件系统管理】
    51单片机数字电压表仿真设计_LCD显示(仿真+程序+原理图+PCB+设计报告+讲解)
    只因简历上有“精通”Redis,阿里三面被面试官狂问 Redis,再也不敢乱写了
    广告变现是什么
    Linux常用命令(3)-文件和目录管理
    STM8S系列基于STVD开发,标准外设库函数开发环境搭建
    dockerfile 中激活conda并安装package
    浙大工商管理硕士(MBA)创客班适合哪些人群申请报考?
    C语言的offsetof宏模拟和用宏实现交换奇偶位
  • 原文地址:https://blog.csdn.net/tinpo_123/article/details/125885316