kafka基本知识

目录

什么是 Kafka?

Kafka 的组件

1. Producer(生产者)

2. Consumer(消费者)

订阅topic:

消费模式

3. Broker(代理)

4. Topic(主题)

5. Partition(分区)

6. Zookeeper

7. Consumer Group(消费组)

8. Offset

Kafka 如何保证消息顺序性?

1、分区的顺序性

2、消息的分区策略

3、消费者的顺序性

kafka消息持久化

1、日志结构存储(Log-Structured Storage)

2、消息的持久化流程

3、数据复制

4、数据保留策略

默认存储机制

Kafka 的生产者(Producer)消息发送

Exactly Once的实现


什么是 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 中消息的分类。每个主题可以有多个分区,消息根据主题进行组织。生产者将消息发送到特定的主题,消费者从主题

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值