Kafka

1. 什么是 Kafka?

Kafka 是一个 分布式流处理平台 ,主要用来处理 实时数据流。它最初由 LinkedIn 开发,现在是 Apache 软件基金会的一个开源项目。

Kafka 通常被用作 消息队列数据流处理系统,提供高吞吐量和高可靠性的实时数据分发能力。

Kafka特性:

  • 发布/订阅 模型。
  • 持久化数据存储。
  • 高吞吐量、低延迟。
  • 横向扩展能力。

2. Kafka 的核心概念

2.1 核心组件

组件 描述
Topic 生产者将消息发送到指定的 Topic,消费者订阅 Topic 接收消息。
Partition 每个 Topic 被分成若干分区,分区是 Kafka 中的存储单元。
Offset 分区内消息的唯一标识,消费者通过 Offset 跟踪消息的位置。
Broker Kafka 的服务器节点,负责存储和分发消息,一个 Kafka 集群由多个 Broker 组成。
Producer 消息生产者,将消息发送到 Kafka。
Consumer 消息消费者,从 Kafka 的分区中读取消息。
Consumer Group 消费者组,多个消费者可以协作消费一个 Topic,确保分区被唯一消费。
ZooKeeper Kafka 的元数据管理工具。

2.2 Kafka 的消息架构图

生产阶段:

producer将消息发送到Topic分区中去,写入leader目录中去

存储阶段:

每个leader会复制多个副本Segment 文件存储消息,支持高效的顺序写入和查询。

消费阶段:

Consumergroup 从分区的 Leader 拉取消息,按 Offset 跟踪消费进度。

2.3消息流转的详细流程

Producer发送消息:

1.选择一个目标Topic:

  • Producer将消息发送给Topic分区
  • Producer会指定一个Topic 进行发送

2.进行分区:

  • Kafka使用分区策略进行分区
  • 指定一个Partition来分配分区作为存储单元
  • 没有指定的时候则采用轮询方式分配分区

3.将消息发送给分区下的leader:

  • Producer通过Kafka与leader进行交互
  • Producer将消息发送给分区下的leader

4.状态确认机制:

Producer可以配置状态来确认消息状态:

  • 0:producer发送给broker就结束(速度最快,但是安全性最低)
  • 1:producer发送给leader写入确认之后返回 (速度中等,安全性中等)
  • all:所有的副本确认写入之后返回 (速度最慢,安全性最高)
Broker存储消息:

1.Leader写入消息:

分区里面的Leader负责接受producer发送的消息,分为三个文件.index .log .timeindex文件

其中.log是正真的消息存储文件,.index是索引文件,.timeindex是时间索引文件

2.复制Follower副本:

Follower副本会复制Leader里面的所有内容,作为同步,副本跟Leader是在同一个分区下面,但是分布在分布在不同的broker里面,Leader跟Follower副本是通过选举来实现的,如果当leader宕机的时候,会重新选取一个同步过的Follower副本来重新成为Leader然后在同步给其他Follower副本,这也是为什么Leader跟Follower副本没有在一个Broker下的原因,防止当一个Broker宕机的时候,消息丢失

3.消息持久化:

  • 消息会写入磁盘的Segment文件进行存储
  • 消息按照offset进行存储,支持快速检索

4.消息清理策略:

  • 通过时间进行清理,默认超过7天之后会进行清除
  • 通过大小进行清理,默认超过1G之后会进行清除
  • 可以通过配置来设定具体的时间或者大小
Cusomer拉取消息:

Cusomer订阅Topic:

  • Cusomergroup订阅一个或多个Topic
  • Kafka会将分区分配给消费者组中的每一个消费者
  • 每个分区只能被一个消费者消费

Cusomer消费消息:

  • Cusomer从分区中的leader拉取消息
  • 拉取的消息通过offset标识,cusomer可以通过offset指定从哪个消息开始拉取

消费策略:

  • Cusomer会只消费最新的消息
  • Cusomer从分区起始的offset开始消费消息
  • Cusomer从指定的offset开始消费消息

3.Kafka的优缺点

优点:

  • 高吞吐量:顺序写磁盘、批量处理消息。
  • 持久化存储:消息可以保留指定时间,允许消费者重复读取。
  • 分布式架构:支持水平扩展,轻松处理海量数据。
  • 灵活消费模型:支持广播和分布式消费。

缺点:

  • 存储占用较大,需合理规划存储资源。

4.kafka的使用场景

在电商系统中,kafka主要可以应用于记录用户行为,电商的访问量大的时候,用户行为量每天将会成倍增加,使用RabbitMQ进行订单用户的消息处理还可以,但是在应对大量的用户行为的时候,RabbitMQ就显得有些捉襟见肘了

相关推荐
❀͜͡傀儡师4 小时前
docker搭建Elasticsearch+Kafka+Logstash+Filebeat日志分析系统
elasticsearch·docker·kafka
老葱头蒸鸡4 小时前
(4)Kafka消费者分区策略、Rebalance、Offset存储机制
sql·kafka·linq
炼金士6 小时前
分布式虚拟 Actor 技术在码头生产调度中的应用研究
分布式·dapr·actor·集装箱码头
xuyanqiangCode6 小时前
KAFKA自动修改所有以**开头的主题脚本
分布式·kafka·linq
Hello.Reader8 小时前
用 Kafka 打通实时数据总线Flink CDC Pipeline 的 Kafka Sink 实战
flink·kafka·linq
周杰伦_Jay9 小时前
【日志处理方案大比拼】 Filebeat+Kafka+Flink+Spark+ES+HDFS VS ELK/AOP/RocketMQ/大厂方案
flink·spark·kafka
回家路上绕了弯10 小时前
高并发订单去重:布隆过滤器过滤已存在订单号的实战方案
分布式·后端
Slow菜鸟11 小时前
Java后端常用技术选型 |(三)分布式篇
java·分布式
q***656912 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
大飞哥~BigFei14 小时前
RabbitMq消费延迟衰减重试实现思路
java·分布式·rabbitmq