Kafka 生产者2025年3月17日 | 阅读 3 分钟 生产者是将数据发布或写入不同分区的 Topic 的组件。生产者会自动知道应该将哪些数据写入哪个分区和代理。用户不需要指定代理和分区。 生产者如何将数据写入集群?生产者使用以下策略将数据写入集群
消息键Apache Kafka 允许使用键的概念以特定顺序发送消息。 键为生产者提供了两种选择,即:要么将数据发送到每个分区(自动),要么仅将数据发送到特定分区。 使用消息键可以将数据发送到一些特定分区。 如果生产者对数据应用键,则该数据将始终发送到同一分区。 但是,如果生产者在写入数据时没有应用键,则数据将以循环方式发送。 此过程称为负载均衡。 在 Kafka 中,当生产者在没有指定任何键的情况下将数据写入 Kafka Topic 时,Kafka 会将少量数据分配到每个分区。 因此,消息键可以是字符串、数字或我们希望的任何内容。 有两种方法可以知道数据是否带有键发送
让我们看一个例子 考虑一种生产者将数据写入 Kafka 集群的场景,并且在未指定 key 的情况下写入数据。 因此,数据在每个代理下的 Topic-T 的每个分区之间进行分发,即 Broker 1、Broker2 和 Broker 3。 ![]() 考虑另一个场景,生产者将键指定为 Prod_id。 因此,Prod_id_1(例如)的数据将始终发送到 Broker 1 下的分区 0,而 Prod_id_2 的数据将始终发送到 Broker 2 下的分区 1。 因此,在应用键后,数据将不会分发到每个分区(如在上面的场景中所见)。 ![]() 确认为了将数据写入 Kafka 集群,生产者还有另一种确认选择。 这意味着生产者可以通过接收以下确认来获得其数据写入的确认
让我们看一个例子 假设,生产者将数据写入 Broker1、Broker 2 和 Broker 3。 情况 1: 生产者将数据发送到每个 Broker,但未收到任何确认。 因此,可能发生严重的数据丢失,并且无法将正确的数据传达给消费者。 ![]() 情况 2: 生产者将数据发送到代理。 Broker 1 拥有领导者。 因此,领导者会询问 Broker 1 是否已成功接收到数据。 在收到 Broker 的确认后,领导者将带有 ack=1 的反馈发送给生产者。 ![]() 情况 3: 生产者将数据发送到每个代理。 现在,领导者及其副本/ISR 将询问他们各自的代理有关数据的信息。 最后,用反馈确认生产者。 ![]() 注意: 在上图中,Broker 1 和 Broker 2 已成功接收到数据。 因此,这两个代理都对其各自的 Topic 回复“是”。下一个主题消费者和消费者组 |
我们请求您订阅我们的新闻通讯以获取最新更新。