怎么做自我介绍网站,河北省建设机械会网站首页,有限责任公司是什么企业类型,河南省住房和城乡建设厅官网查询一、Kafka 主要用来做什么
作为消息系统#xff1a;Kafka 具备系统解藕#xff0c;流量削峰#xff0c;缓冲#xff0c;异步通信#xff0c;扩展性#xff0c;可恢复性等功能#xff0c;以及消息顺序性保障和回溯消费
作为存储系统#xff1a;Kafka 把消息持久化到磁…一、Kafka 主要用来做什么
作为消息系统Kafka 具备系统解藕流量削峰缓冲异步通信扩展性可恢复性等功能以及消息顺序性保障和回溯消费
作为存储系统Kafka 把消息持久化到磁盘相比较基于内存存储的系统降低了数据丢失的风险可以将数据保留策略设置为永久或启用主题的日志压缩功能即可这里我也没有见到过实际的应用留在这里暂时作为了解即可
作为流式处理平台未来需要时再研究 二、Kafka 的基本概念
1 ProducerBroker 和 Consumer
Kafka 体系架构包括若干个 Producer, 若干个 Broker若干个 Consumer以及一个 Zookeeper 集群。
Producer 将消息发给 BrokerBroker 负责将收到的消息存储到硬盘而 Consumer 负责从 Broker 订阅并消费消息。
Zookeeper 主要负责管理 Broker 集群。 我们常说的 Kafka 集群其实就这其中的若干个 Broker 组成的集群 2 Topic 和 Partition
2.1 理解概念
其实个人感觉这里的理解可以类比 MysqlTopic 就是这个表的结构消息就是表里面的每一行数据Partition 就是分表。
同一个 TopicProducer 可以发多个消息这么多个消息都存储在不同的 Partition 上并且通过 offset 来进行标识类似 Mysql 里的主键 ID不过 offset 并不跨区就相当于 Mysql 不同分表里的主键 ID 一样
每一条消息被发送到 broker 之前会根据分区规则来选择存储在哪个具体的分区 1.Kafka 同一主题下的不同分区包含的消息是不同的 2.Kafka 的分区可以分布在不同的 broker 上所以一个主题可以横跨多个 broker解决了单机 IO瓶颈问题通过修改分区的数量还可以实现水平扩展 2.2 Partition 和 Replica
2.2.1 Kafka 的分区有多副本 Replica 机制不同的副本处于不同的 broker 上当 leader 出现故障时从 follower 中重新选举出新的 leader 副本对外提供服务。通过增加副本的数量可以提升容灾的能力。 虽然 leader 宕机之后可以故障转移快速选举出一个新的 leader但是宕机的时候写入 leader 的消息如果还没来得及同步消息也一样会丢失。 这个时候需要在业务系统里实现补偿重试的逻辑比如添加 ack 等到全部同步之后才认为是成功否则就进行重试再次发送消息到 Kafka 中。 Producer 和 Consumer 只和 leader 副本进行交互follower 副本只负责消息的同步。
若 Kafka 有 10 个分区3个副本总体一共有 30 个副本其中包含 10 个 leader 副本和 20个 follower 副本。
Kafka 消费端也具备一定的容灾能力Consumer 使用 Pull 模式从服务端拉取消息并且保存消费的具体位置当 Consumer 宕机后恢复上线可以根据之前保存的消费位置重新拉取需要的消息进行消费这样就不会造成消息丢失 -- Consumer 都宕机了offset 保存在哪 2.2.2 理解 ISROSR 和 AR
分区里的所有副本统称为 ARAssigned Replicas
与 leader 保持同步副本叫 ISR (In-Sync Replicas)包含 leader与 leader 副本同步滞后过多的副本叫 OSR Out-of-Sync Replicas不包含 leader
leader 宕机之后只会从 ISR 集合中选择下一个 leader 2.2.3 理解 HWLEO 和 SR 之间的关系
HW High WaterMark高水位可消费消息的最后一位 1
LEOLow End Offset, 已有的消息的最后一位 1也是当前即将要写入最新消息的位置 消费者只能消费 HW 之前的消息之后的消息表示还没有同步完成