关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Kafka 副本间如何实现数据同步?

发布时间:2023-11-16 20:21:42

哈喽大家好,我是咸鱼


最近这段时间比较忙,将近一周没更新文章,再不更新我那为数不多的粉丝量就要库库往下掉了 T﹏T


刚好最近在学 Kafka,于是决定写篇跟 Kafka 相关的文章(文中有不对的地方欢迎大家指出)


考虑到有些小伙伴可能是第一次接触 Kafka ,所以先简单介绍一下什么是 Kafka 吧!


图片图片

还能够把消息持久化到磁盘上,用于批量消费。除此之外由于 Kafka 被设计成分布式系统,吞吐量和可用性大大提高


Kafka 角色

  • 生产者(producer):也叫发布者,负责创建消息

  • Kafka 服务端(broker)

  • leader:对外提供读写服务

  • follower:不提供服务,负责向 leader 同步数据


图片图片


例如某个 topic 下被划分成 n 个分区,那么这个 topic 的并发度就提高 n,同时可以支持 n 个 consumer 并行消费该 topic 中的消息


log(日志)

对于每一个 topic ,Kafka 都会维护一个分区日志

Kafka 集群


Kafka 是分布式架构,有集群(cluster)的概念


Kafka 中的一个实例被称为 broker,它接收生产者的消息并存入磁盘,消费者连接 broker 消费消息


多个 broker 组成一个 Kafka cluster,集群内某个 broker 会成为集群控制器(cluster controller),负责管理整个 Kafka 集群,包括分配分区给 broker,监控 broker 等


分区被复制成了多个副本(replica)然后均分在不同的 broker 上 ,其中一个副本 Leader,其他的是 Follower


创建副本的单位是 topic 的 分区


正常情况下,每个分区都有一个 leader 和零或多个 followers 。这样即使某个 broker 发生故障,其他 broker上的副本仍然可以继续提供服务

  • 将所有 broker(假设共 n 个 broker)和待分配的分区排序
  • 将第 i 个分区分配到第(i mod n)个 broker上
  • 将第 i  个分区的第 j 个副本分配到第((i + j) mode n)个 broker 上


  • Kafka 中的 topic 是逻辑概念,每个 topic 可以被划分为多个分区,而分区才是存储消息的实体
  • 每一个分区会被复制成多个副本,然后选取其中一个副本当作 leader,剩下的则是 follower
  • follower 会定期去向 leader 发送 fetch 请求来保证数据的同步
  • leader 不会关心 follower 的数据是不是同步好了的,只要你在指定时间内没有找我来 fetch ,我就把你从 ISR 中剔除出去(事实证明主动点也并非坏事)


声明:本站发布的内容以原创、转载、分享网络内容为主,如有侵权,请联系电话:182-7159-2020,邮箱:910351876@qq.com ,我们将会在第一时间删除。文章观点不代表本站立场,如需处理请联系我们。

/template/Home/Zkeys2/PC/Static