淘宝网站建设维护会计科目,自己弄个网站,做百度seo,大连地区网站建设1 首先要了解kafka是什么
Kafka是一个分布式的消息订阅系统
1.1 kafka存储消息的过程
消息被持久化到一个topic中#xff0c;topic是按照“主题名-分区”存储的#xff0c;一个topic可以分为多个partition#xff0c;在parition(分区)内的每条消息都有一个有序的id号topic是按照“主题名-分区”存储的一个topic可以分为多个partition在parition(分区)内的每条消息都有一个有序的id号这个id号被称为偏移(offset记录消息的消息位置**
1.2 partition 不能不了解的知识
Partition是Kafka中数据分布的基本单位里面的数据是储存在硬盘中的追加式的通过将数据分散到多个Partition上多个partition可以并行处理数据所以可以处理相当量的数据可以实现数据的并行处理和负载均衡。同一个 Consumer Group 中只有一个 Consumer 实例可消费某个 Partition 的消息 每个Topic可以根据预期的数据量和处理需求设置适当数量的Partition
虽然分区机制可以提高系统的整体吞吐量但它并不是为了实现负载均衡而设计的。相反Kafka 更关注的是数据的持久性、可用性和容错能力
请注意Partition的数量一旦确定后一般情况下是不能直接更改的。因为更改Partition数量可能会影响数据的分布和处理所以在设计Topic时需要仔细考虑预期的数据量、吞吐量以及系统的伸缩性需求。
1.3 partition和replica之间的暧昧关系
具体来说Kafka 通过将主题topic分为多个分区partition并将每个分区复制到多个节点上来实现高可用性和扩展性。每个分区都有一个主节点leader和多个副本节点replica。主节点负责处理来自生产者的消息和消费者的读取请求而副本节点则用于备份数据并提供冗余。如果主节点失效Kafka 会自动选举一个副本节点作为新的主节点以保持服务的连续性。**
这种设计确保了高可用性和数据冗余但并不是所有节点都直接参与消息的处理。
2 kafka的相关名词 1.producer 消息生产者发布消息到 kafka 集群的终端或服务。 2.broker kafka 集群中包含的服务器。 3.topic 每条发布到 kafka 集群的消息属于的类别即 kafka 是面向 topic 的。 4.partition partition 是物理上的概念每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。 5.consumer 从 kafka 集群中消费消息的终端或服务。 6.Consumer group high-level consumer API 中每个 consumer 都属于一个 consumer group每条消息只能被 consumer group 中的一个 Consumer 消费但可以被多个 consumer group 消费。 7.replica partition 的副本保障 partition 的高可用。 8.leader replica 中的一个角色 producer 和 consumer 只跟 leader 交互。 9.follower replica 中的一个角色从 leader 中复制数据。 10.controller kafka 集群中的其中一个服务器用来进行 leader election 以及 各种 failover。 12.zookeeper kafka 通过 zookeeper 来存储集群的 meta 信息 2.1 kafka的工作流程 3 不能不知道的主角zk
在 Kafka 中ZooKeeper简称为ZK并不用来直接存储消息数据而是用于协调和管理 Kafka 集群的元数据和状态信息。ZooKeeper 在 Kafka 中扮演以下几个角色
1. 保存 Kafka 集群的元数据ZooKeeper 存储了关于 Kafka 集群的元数据包括主题topics、分区partitions、副本replicas等信息。这些元数据描述了 Kafka 集群的整体结构和配置。 2. 管理消费者组的偏移量offsetZooKeeper 用于存储和管理消费者组的偏移量信息。消费者组在消费消息时会将当前消费的偏移量保存在 ZooKeeper 中以便后续继续消费。
3. 选举 Kafka 控制器ControllerKafka 集群中的一个节点会被选举为控制器负责管理分区的分配和副本的重新分配。ZooKeeper 用于协调和选举控制器节点。 4. 监测集群成员状态ZooKeeper 监测和报告 Kafka 集群中各个节点的状态例如节点的上线和下线。
3.1 生产者往zk注册消息
消息发送者会在Zookeeper中注册相关信息在Zookeeper中获取Broker以及Topic的信息然后将消息数据写入到指定的Kafka Topic中。
3.2 消费者往zk注册
Kafka依托于Zookeeper来注册Broker的信息消费者会在Zookeeper注册消费者信息同时也是通过Zookeeper来发现Kafka中的Broker列表。
发送者和消费者都会在Zookeeper中注册信息通过Zookeeper来获取要存储或者消费的Kafka Broker列表。
Kafka的消息数据都是存储在Topic中的Kafka会将Topic的元数据信息存储在Zookeeper中维护Topic和Broker的关系只存储元数据不存储消息数据。
3.3 你知道的元数据
topic信息topic有哪些分区哪些副本分别在哪台broker上哪个是leaderconsumer信息及读取消息后提交的偏移量数据等元数据存储在zk中
3.4 被需要的zk
Kafka使用Zookeeper的原因Kafka中会有若干个BrokerBroker需要通过分布式协调服务来维护统一管理Broker的配置信息客户端和消费者直接从配置中心获取Broker的信息为Broker与Broker之间的请求建立安全协议而这种分布式协调服务中Zookeeper是最可靠的
每个broker只存储消息体不存储元数据
4、非常关键副本
高可用数据持久化数据备份
4.1 kafka副本的选举策略
其中kafka分区中所有的副本统称未AR副本leader的选举策略为在isr中存活为前提按照AR中排在前面的优先例如AR[1,0,2] ,isr [1,0,2]那么leader就会按照102的顺序进行轮询
4.2 分区和副本数据一致性 分区领导者选举每个分区都有一个 leader 和多个副本(replica)。在一个分区中只有 leader 能够处理读写请求而副本只负责复制数据以实现高可用性。当某个分区的 leader 发生故障或宕机时Kafka 需要在副本中选择一个新的 leader。这个选举过程由 ZooKeeper 协助完成。ZooKeeper 负责跟踪每个分区的 leader 和副本状态并在 leader 不可用时发起新的选举。 ISRIn-Sync Replicas机制Kafka 引入了 ISR 机制来确保 leader 和 leader 副本之间的数据一致性。ISR 是指与 leader 处于同步状态的副本集合。在正常情况下leader 和 ISR 中的副本具有相同的数据。当生产者发送消息时只有写入 leader 并复制到 ISR 中的副本才被视为成功。这确保了所有可用的副本在给定时间点都具有相同的数据。 消息确认机制生产者发送消息后可以选择等待确认或异步发送。如果设置为等待确认生产者将在消息成功写入 leader 和 ISR 中的所有副本之后收到来自 Kafka 的确认。这种方式保证了消息的可靠性。 数据同步Kafka 使用副本同步机制来保持 leader 和 follower 副本之间的数据一致性。当消息被写入 leader 时leader 将消息发送给其 ISR 中的所有副本。副本收到消息后会回复确认leader 在收到 ISR 中的大多数副本确认后才认为消息成功提交然后将确认发送给生产者。这确保了所有 ISR 中的副本在给定时间点具有相同的数据。 5、producer发布消息
producer 采用 push 模式将消息发布到 broker每条消息都被 append 到 patition 中属于顺序写磁盘顺序写磁盘效率比随机写内存要高保障 kafka 吞吐率。
5.1 是如何发布消息到分区的
producer 发送消息到 broker 时会根据分区算法选择将其存储到哪一个 partition。
其路由机制为
1. 指定了 patition则直接使用
2. 未指定 patition 但指定 key通过对 key 的 value 进行hash 选出一个 patition
3. patition 和 key 都未指定使用轮询选出一个 patition 5.2 流程说明 1. producer 先从 zookeeper 的 /brokers/.../state 节点找到该 partition 的 leader
2. producer 将消息发送给该 leader
3. leader 将消息写入本地 log
4. followers 从 leader pull 消息写入本地 log 后 leader 发送 ACK
5. leader 收到所有 ISR 中的 replica 的 ACK 后增加 HWhigh watermark最后 commit 的 offset 并向 producer 发送 ACK
5.3 发送消息topic分类
Producer即生产者向Kafka集群发送消息在发送消息之前会对消息进行分类即Topic两个producer发送了分类为topic1的消息另外一个发送了topic2的消息。 Topic即主题通过对消息指定主题可以将消息分类消费者可以只关注自己需要的Topic中的消息 Consumer即消费者消费者通过与kafka集群建立长连接的方式不断地从集群中拉取消息然后可以对这些消息进行处理。 从上图中就可以看出同一个Topic下的消费者和生产者的数量并不是对应的
6 消费者消费消息
在消费者消费消息时kafka使用offset来记录当前消费的位置 在kafka的设计中可以有多个不同的group来同时消费同一个topic下的消息有两个不同的group同时消费他们的的消费的记录位置offset各不相同不互相干扰。 对于一个group而言消费者的数量不应该多余分区的数量因为在一个group中每个分区至多只能绑定到一个消费者上即一个消费者可以消费多个分区一个分区只能给一个消费者消费 因此若一个group中的消费者数量大于分区数量的话多余的消费者将不会收到任何消息。
7、broker存储消息周期分类
Kafka中的消息保留策略是通过配置参数进行配置的。一种常见的配置是使用时间保留策略即设置一个保留时间超过该时间的消息将被删除。另一种常见的策略是基于消息的大小来设置保留策略即设置一个最大的消息保留容量一旦超过这个容量旧的消息将被删除。
因此即使消息被消费完它们可能在Kafka集群中保留一段时间直到达到保留策略所定义的条件。这样可以确保消息在需要时可以重新消费或重新读取。但请注意一旦消息达到保留策略的条件它们将被永久删除无法再次访问。
无论消息是否被消费kafka 都会保留所有消息。有两种策略可以删除旧数据 基于时间log.retention.hours168 基于大小log.retention.bytes1073741824 需要注意的是因为Kafka读取特定消息的时间复杂度为O(1)即与文件大小无关所以这里删除过期文件与提高 Kafka 性能无关