segmentio/kafka-go: 如何实现Kafka读写的极致性能与精准一次处理

前戏 小白: 老花, 我想学习下golang如何批量写入和消费 kafka? 老花: 可以的, 我这里要推荐一个golang的kafka库, github.com/segmentio/kafka-go, 在此之前, 我们先来一波八股文。 kafka 分区架构(八股文) 分区 分区(Partition)是 Kafka 中最基本的数据存储单元。每个主题(Topic)可以有多个分区, 每个分区都是一个有序的、不可变的消息序列。分区的设计使得 Kafka 能够实现数据的并行处理和负载均衡。 并行处理: 通过分区, Kafka 允许多个消费者并行处理不同分区的数据, 从而提高系统的处理能力。 数据本地性: 每个分区可以分布在不同的 Broker 上, 这样可以充分利用集群的存储能力, 并实现数据的分布式存储。 顺序保证: 在单个分区内, 消息是有序的, 这有助于确保一些需要顺序处理的场景, 如日志记录。 生产者与消费者操作分区 生产者发送消息到指定 Partition: 生产者可以根据需要将消息发送到特定的分区, 这可以通过指定消息的分区键来实现。 消费者订阅指定 Partition: 消费者可以选择订阅特定的分区, 也可以订阅整个 Topic, 以实现对特定数据流的处理。 负载均衡 Kafka 的生产者在将消息发送到分区时, 使用分区键的哈希函数来决定消息应该被分配到哪个分区, 这有助于实现负载均衡。 幂等性 enable.idempotence 被设置成 true 后, Producer 自动升级成幂等性, 在底层设计架构中引入了 ProducerID 和 SequenceNumber, 自动帮你做消息的重复去重。 事务 事务要求消息一起成功发送, 要么一起失败。简单来说,就像是个打包操作,把消息 Record1 和 Record2 看作一个整体,要么一起成功,要么一起失败。 ...

十二月 23, 2024 · 7 分钟 · 1464 字 · zhu733756