目录
1、日志结构存储(Log-Structured Storage)
什么是 Kafka?
Apache Kafka 是一个开源的分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 软件基金会的一部分。Kafka 主要用于构建实时数据管道和流处理应用程序。它能够高效地处理大量的数据流,广泛应用于日志收集、数据集成、实时分析等场景。
Kafka 的高效性源于以下几个关键设计理念和实现原理:
分布式架构:Kafka 采用分布式架构,能够横向扩展。通过增加 broker 的数量,可以轻松提高系统的吞吐量和可用性。
高吞吐量:Kafka 使用顺序写入和批量处理的方式来提高写入性能。消息被写入到磁盘时,Kafka 将多个消息合并为一个批次进行写入,减少了磁盘 I/O 操作。
持久化存储:Kafka 将消息持久化到磁盘,并使用高效的日志结构存储(Log-Structured Storage确保数据的可靠性和持久性。
高可用性:Kafka 通过主副本机制和数据复制来确保高可用性。每个分区都有一个主副本和多个从副本,主副本负责处理读写请求,而从副本则保持与主副本的数据同步。
灵活的消费模式:Kafka 支持多种消费模式,包括点对点和发布/订阅模式,消费者可以根据需求选择适合的消费方式。
Kafka 的组件
| 组件 | 作用说明 | 类比现实案例 |
|---|---|---|
| Broker | 消息存储和转发的服务器节点 | 快递分拣中心 |
| Topic | 消息的分类主题(逻辑概念) | 快递包裹上的地址标签 |
| Partition | Topic的物理分片,保证并行处理 | 分拣中心的多个传送带 |
| Producer | 消息生产者 | 寄件客户 |
| Consumer | 消息消费者 | 收件客户 |
| Consumer Group | 消费者组(实现并行消费) | 分拣中心的多个工作人员 |
1. Producer(生产者)
生产者是向 Kafka 发送消息的客户端应用程序。它负责将数据发布到指定的 Kafka topic。生产者可以选择目标 topic 和分区,并将消息序列化为字节流,负责处理消息的发送确认和错误处理。
2. Consumer(消费者)
消费者是从 Kafka 中读取消息的客户端应用程序。它可以订阅一个或多个 topic,并处理接收到的消息。消费者通过 offset 来跟踪已处理的消息。(订阅topic->拉取消息并处理->提交offset跟踪)
订阅topic:
使用 subscribe()方法:这是最常用的方式,消费者可以通过调用 subscribe() 方法来订阅一个或多个主题。KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList("topic1", "topic2"));
使用assign()方法: 这种方式允许消费者手动分配特定的分区。通过 assign() 方法,消费者可以直接指定要消费的分区。例如:TopicPartition partition = new TopicPartition("topic1", 0); consumer.assign(Arrays.asList(partition));
消费模式
1、自动提交模式(Auto Commit):在自动提交模式下,消费者会定期自动提交消息的偏移量。Kafka 提供了一个配置项 enable.auto.commit,默认值为 true。在这种模式下,消费者在调用poll()方法后会自动提交已消费消息的偏移量。优点:实现简单,适合对消息处理顺序和可靠性要求不高的场景。缺点:可能会导致消息丢失或重复消费,因为在处理消息时,如果消费者崩溃,已提交的偏移量可能会指向未处理的消息。
2、手动提交模式(Manual Commit):在手动提交模式下,消费者需要显式地提交消息的偏移量消费者可以在处理完消息后,调用 commitSync() 或 commitAsync() 方法来提交偏移量。优点:提供了更高的控制能力,可以确保在消息处理成功后再提交偏移量,从而避免消息丢失和重复消费。缺点:实现相对复杂,需要开发者管理偏移量的提交逻辑。
3、消费组(Consumer Group):Kafka 支持消费者组的概念,多个消费者可以组成一个消费组共同消费同一个主题的消息。每个分区只能被同一个消费组中的一个消费者消费,这样可以实现负载均衡。优点:提高了系统的吞吐量和可扩展性,适合处理高并发的消息消费场景。缺点:需要注意消费者组的管理和协调,确保消费者的状态一致性。
3. Broker(代理)
broker 是 Kafka 集群中的服务器,负责存储和管理消息,接收来自生产者的消息并将其存储在分区中,响应消费者的请求,提供消息。处理数据的复制和故障转移。一个 Kafka 集群可以包含多个 broker,每个 broker 可以处理读写请求,并存储一部分数据。
4. Topic(主题)
主题是 Kafka 中消息的分类。每个主题可以有多个分区,消息根据主题进行组织。生产者将消息发送到特定的主题,消费者从主题

最低0.47元/天 解锁文章
6220

被折叠的 条评论
为什么被折叠?



