zoukankan      html  css  js  c++  java
  • Kafka 学习笔记一:基本概念

    1. zookeeper: 负责集群元数据管理、控制器的选举等操作
    2. producer: 将消息发送到 broker
    3. broker: 将收到的消息存储到磁盘中
    4. consumer: 负责从 broker 订阅并消费消息
    5. topic: 消息主题(逻辑概念),生产者和消费者都以 topic 为单位进行生产和消费
    6. partition: 分区(也称作 topic-partition 主题分区,topic 的物理概念),同一个 topic 可以分为多个 partition,一个 partition 只属于单个 topic。分区在存储层面可以看做一个可追加的日志文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset 是消息在分区中的唯一标识,kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,kafka 保证的是分区有序而不是主题有序。

    分区的副本机制

    一个分区可以有多个副本,一主多从,leader 副本负责处理读写请求,follower 副本只负责与 leader 副本的消息同步。多个副本处于不同的 broker 中,当某个 broker 失效后仍能保证服务可用。

    不同分区的同步速度不一致,kafka 把同步程度不同的副本做了区分:

    1. AR (Assigned Replicas): 所有副本的统称。AR = ISR + OSR。
    2. ISR (In-Sync Replicas): 与 leader 保持一定程度同步的副本。当 leader 故障时,只有在 ISR 集合中的副本才有资格被选举为新的 leader
    3. OSR (Out-of-Sync Replicas): 与 leader 同步滞后过多的副本。

    偏移量的一些概念与 ISR 的关系:

    1. HW (High Watermark) 高水位:一个特定的 offset,消费者只能拉取到这个 offset 之前的消息(消息可见性)。
    2. LEO (Log End Offset): 当前日志文件中下一条待写入消息的 offset。
    3. 三者之间的关系:ISR 集合中最小的 LEO 即为分区的 HW。

    举个例子:

    1. 假设有一个分区 leader 副本为 L1,有两个 follower 副本为 F1, F2
    2. 此时,L1, F1, F2 的同步进度一致,都有三条消息m0,m1,m2
    3. 2个 follower 副本都处于 ISR 集合,LEO都为 2,所以 HW 为 2
    4. 这时生产者写入两条消息 m3,m4
    5. F1 同步速度快,同步了两条消息,F2同步速度慢,只同步了 m3
    6. 此时,F1 的 LEO 为 4,F2 的 LEO 为3,当前分区的 HW 取最小值为 3
    7. 之后 F2 也同步了 m4,LEO 变为 4
    8. F1 和 F2 的 LEO 都为 4,HW 也为4

    (详细可以见书中的流程图,这里就不贴图了)

  • 相关阅读:
    第16章 Java内存模型
    第15章 原子变量与非阻塞同步机制
    第14章 构建自定义的同步工具
    第13章 显式锁
    第12章 并发程序的测试
    第11章 性能与可伸缩性
    第10章避免活跃性危险
    第8章 线程池的使用
    JDBC工具类——JdbcUtils(6)
    JDBC工具类——JdbcUtils(5)
  • 原文地址:https://www.cnblogs.com/chaohangz/p/14929416.html
Copyright © 2011-2022 走看看