• Kafka进程职责与交互;Kafka Partition保证副本数据一致性


    from:https://zhuanlan.zhihu.com/p/338415186

    1. Kafka 进程职责与交互

    • oker: Kafka 的处理节点(即一台物理服务器),一个节点就是一个 Broker,一个 Kafka 集群由一个或多个 broker 组成。
    • Topic / Partition:Topic 是逻辑上的概念,用于 Kafka 对消息进行主题归类,发送到集群的每一条消息都要指定一个 Topic。每个 Topic 包含一个或多个 Partition 分区,一个 Partition 对应一个文件夹,这个文件夹下存储 Partition 的数据和索引文件,每个partition 内部有序,partition 之间无序。另外为了保证高可用,数据会根据配置冗余存储多份至不同的 Partition。Partition 可以提高消费端的并发度。
    • Consumer / ConsumerGroup:Consumer 是消费者,负责从 Broker 读取消息,每个 consumer 属于一个特定的 consumer group,一条数据可以发送到不同的 Consumer group,但对于同一条数据一个Consumer group 只能由其中的某一个Consumer 消费一次。
    • Producer: Producer 是数据生产者,负责写入数据到 Broker ,在客户端构建ProducerRecord(topic, partition, key, value) 对象并序列化,根据参数确定写入分区,然后将相同分区数据作为一个批次,内部线程负责把这些数据按批次发送到相应的 broker 。Broker 写入数据成功则会返回一个 RecordMetaData 对象,包含了 Topic 、Partition 、Offset 信息。若写入失败,则生产者会收到错误信息,并重新发送,失败次数达到阈值则抛出异常。

    2 Kafka Partition 如何保证副本数据的一致性


    为了保证可用性,Kafka 的分区是多副本的,可以在创建分区时通过 replication-factor 参数指定该分区的副本数,某一副本丢失并不会造成实际数据的丢失,从其他副本获取数据即可。但同时引出了另外一 个问题,各个副本之间的数据如何保证一致性?


    首先,分区的副本根据⻆色的不同可分为:Leader 副本、 Follower 副本

    -**Leader 副本**:Leader 负责与 Producer 和 Consumer 交互,即**数据的读写。**
    **Follower 副本**:**被动地备份 leader 副本中的数据**,不与 Client 端做任何交互。


    另外,不得不提的是 ISR,即(in-sync Replica)副本同步队列:它包含了 Leader 副本和所有与Leader 副本保持同步的 Follower 副本。那么如何判断 Follower 副本与 Leader 是同步的? Leader 副本和 Follower 副本有两个重要的属性值,如图 LEO 日志末端位移和 HW 水位线。

    LEO(log end offset):记录日志的末端位移值,即数据写到的最新的位置。
    *HW(high watermark):取最小的 LEO 作为 HW,即** Committed 过的最新数据**。consumer 最多
    只能消费到 HW 所在的位置,因为小于等于 HW 值的数据才是 Committed 备份过的。

    我们再来看一下,LEO和HW的更新时机

    Leader 除了 HW 和 LEO 还会有 RemoteLEO 这个属性,表示 Follwer 的 LEO。Leader 在以下情况下会更新这三个属性。

    *LEO:Producer 端**有数据写入成功**时 Leader 会自动地更新 LEO 值
    *HW:**有请求**的时候(Producer 或 Follower 的请求)会对比自己 LEO和Remote LEO 取小值更新
    HW
    *Remote LEO:Leader 处理 Follower 的 Fetch 请求时,将 Remote LEO 更新为 Follwer 请求中
    附带的 LEO 值 。

    Follower 只有 HW 和 LEO 两个属性,更新时机为:

    *LEO:同样是**有数据写入成功**时就会自动地更新 LEO 值。
    *HW:Follower 更新 HW 发生在其**更新 LEO 之后**,一旦 Follower 向 log 写完数据,它会尝试
    更新它自己的 HW 值。更新的条件是**比较当前 LEO 值与 Response 中 Leader 的 HW 值**,取两者
    的小者作为新的HW 值,如图的 HW:1 会在此时更新为 2。
    人生还有意义。那一定是还在找存在的理由
  • 相关阅读:
    安全性
    黄保翕的书总结
    Week14(12月11日):路由
    Week14(12月9日)
    Week13(12月5日):不怕错误,慢慢来 :)
    必会技能
    eclipse建maven pom报错
    查看Linux连接数
    查mysql字段中的数字记录
    清理c盘检查
  • 原文地址:https://www.cnblogs.com/shiqi17/p/14991414.html
Copyright © 2020-2023  润新知