外贸营销网站制作,西部数码网站管理助手使用教程,商讨网站建设新闻稿,谷歌外贸平台推广需要多少钱目录 kafka是什么
Topic
Partition
Broker
Cousumer
CousumerGroup
Offset
reblance
broker 消息存储
Isr kafka是什么
Kafka 是一个分布式的消息引擎#xff0c;能够发布和订阅消息流#xff08;类似于消息队列#xff09; 以容错的、持久的方式存储消息流 多分区…目录 kafka是什么
Topic
Partition
Broker
Cousumer
CousumerGroup
Offset
reblance
broker 消息存储
Isr kafka是什么
Kafka 是一个分布式的消息引擎能够发布和订阅消息流类似于消息队列 以容错的、持久的方式存储消息流 多分区概念提高了并行能力。
架构如下图 Topic
消息的主题、队列每一个消息都有它的 topicKafka 通过 topic 对消息进行归类。Kafka 中可以将 Topic 从物理上划分成一个或多个分区Partition每个分区在物理上对应一个文件夹以”topicName_partitionIndex” 的命名方式命名该 dir 包含了这个分区的所有消息 (.log) 和索引文件 (.index)这使得 Kafka 的吞吐率可以水平扩展。
Partition
每个分区都是一个顺序的不可变的消息队列 并且可以持续的添加
分区中的消息都被分了一个序列号称之为偏移量 (offset)在每个分区中此偏移量都是唯一的。
producer 在发布消息的时候可以为每条消息指定 Key这样消息被发送到 broker 时会根据分区算法把消息存储到对应的分区中一个分区存储多个消息如果分区规则设置的合理那么所有的消息将会被均匀的分布到不同的分区中这样就实现了负载均衡。 Broker
Kafka server用来存储消息Kafka 集群中的每一个服务器都是一个 Broker消费者将从 broker 拉取订阅的消息 Producer 向 Kafka 发送消息生产者会根据 topic 分发消息。生产者也负责把消息关联到 Topic 上的哪一个分区。最简单的方式从分区列表中轮流选择。也可以根据某种算法依照权重选择分区。算法可由开发者定义。
Cousumer
Consermer 实例可以是独立的进程负责订阅和消费消息。消费者用 consumerGroup 来标识自己。同一个消费组可以并发地消费多个分区的消息同一个 partition 也可以由多个 consumerGroup 并发消费但是在 consumerGroup 中一个 partition 只能由一个 consumer 消费。
CousumerGroup
同一个 Consumer Group 中的 ConsumersKafka 将相应 Topic 中的每个消息只发送给其中一个 Consumer
Offset
onsumer 的消息位移代表了当前 group 对 topic-partition 的消费进度consumer 宕机重启后可以继续从该 offset 开始消费。 在 kafka0.8 之前位移信息存放在 zookeeper 上由于 zookeeper 不适合高并发的读写新版本 Kafka 把位移信息当成消息发往 consumersoffsets 这个 topic 所在的 broker_consumersoffsets 默认有 50 个分区。 消息的 key 是 groupIdtopicpartition,value 是 offset.
reblance
一些原因导致 consumer 对 partition 消费不再均匀时kafka 会自动执行 reblance使得 consumer 对 partition 的消费再次平衡。以下导致再平衡
组订阅 topic 数变更topic partition 数变更consumer 成员变更consumer 加入群组或者离开群组的时候consumer 被检测为崩溃的时候
新版本之后通过延迟进入 PreparingRebalance 状态减少 reblance 次数
broker 消息存储
Kafka 的消息以二进制的方式紧凑地存储节省了很大空间 此外消息存在 ByteBuffer 而不是堆这样 broker 进程挂掉时数据不会丢失同时避免了 gc 问题 通过零拷贝和顺序寻址让消息存储和读取速度都非常快 处理 fetch 请求的时候通过 zero-copy 加快速度
Isr
Kafka 结合同步复制和异步复制使用 ISR与 Partition Leader 保持同步的 Replica 列表的方式在确保数据不丢失和吞吐率之间做了平衡。Producer 只需把消息发送到 Partition LeaderLeader 将消息写入本地 Log。Follower 则从 Leader pull 数据。Follower 在收到该消息向 Leader 发送 ACK。一旦 Leader 收到了 ISR 中所有 Replica 的 ACK该消息就被认为已经 commit 了Leader 将增加 HW 并且向 Producer 发送 ACK。这样如果 leader 挂了只要 Isr 中有一个 replica 存活就不会丢数据。