消息队列Kafka

MQ存在的问题
  • 消息丢失
  • 重复消费
  • 消息堆积
  • 高可用
  • 高性能
  • 数据存储和清理
为什么选择kafka,kafka的主要特点
  • 高性能:Kafka 能够处理大量的实时数据流,具有极高的吞吐量,每秒可以处理数百万条消息。
  • 持久性和可靠性:Kafka 将数据持久化到磁盘,并通过复制机制保证数据的可靠性和高可用性。
  • 可伸缩性:Kafka 支持水平扩展,可以通过增加更多的节点来扩展集群的规模。
  • 灵活的订阅模式:支持发布/订阅(Publish/Subscribe)和点对点(Point-to-Point)两种消息传递模式。
  • 丰富的生态系统:Kafka 拥有广泛的生态系统支持,包括多种语言的客户端库和与其他系统的集成工具。
kafka的架构、主要组件
  • 生产者(Producer):负责将数据发送到 Kafka 的 Topic 中。
  • 消费者(Consumer):负责从 Kafka 的 Topic 中消费数据。
  • Broker:Kafka 集群中的一个或多个服务器,负责存储和转发消息。
  • Topic:逻辑上的分类或馈送流,是生产者发布的消息和消费者消费的消息的载体。
  • 分区(Partition):物理上的划分,一个 Topic 可以划分为多个分区,每个分区可以存在于不同的 Broker 上,提高了系统的可伸缩性和可用性。
  • 副本(Replica):为了保证数据的高可用性和容错性,Kafka 对 Topic 的每个分区都会维护一个或多个副本,其中一个是 Leader,其他为 Follower。
  • 偏移量(Offset):消费者可以通过偏移量来记录其在 Topic 中的消费进度。
kafka的工作流程
  • 生产者将消息发送到指定的 Topic 中。
  • Broker 接收消息并将它们存储在磁盘上,并根据配置的分区策略将消息分配到不同的分区。
  • 消费者从 Broker 中拉取消息,并根据偏移量来追踪消费进度。
  • Leader 和 Follower:Leader 负责处理客户端请求,Follower 作为备份,跟随 Leader 的状态。
kafka如何解决消息丢失问题

生产者发送消息丢失:开启重试机制,异步发送失败后记录日志后续补偿

消息在Broker中丢失:开启发送确认ACK机制,确认生产者发送消息后,所有broker写入消息了才会进行确认。acks=0无需broker确认,默认acks=1至少一个broker接收确认,acks=all所有broker接收确认

消费消息丢失:禁用自动提交偏移量,手动提交偏移量

kafka如何保证消费顺序

如果要保证消费顺序,将生产者发送消息配置为使用特定的分区,可以按key分区,可以使需要顺序消费的消息发送到同一分区,并且是按顺序写入和消费的。

kafka解决重复消费

开启手动提交偏移量,代码业务设置好补偿逻辑,使用唯一索引,乐观锁这些方式来解决重复提交问题

kafka的高可用机制

集群、分区备份机制(in-sync replica同步备份,优先成为leader)

kafka的消息存储和清理机制

存储机制:

Kafka 使用日志结构来存储数据。每个 Topic 的每个 Partition 都对应一个或多个日志文件,这些文件存储在磁盘上。

日志文件通常按照时间顺序进行分割,每个文件称为一个 Segment。Segment 文件的命名规则为 partion_id-segment_id.index 和 partion_id-segment_id.log。

Segment 文件:

Segment 文件的大小可以通过配置参数 log.segment.bytes 控制,默认值为 1GB。

当一个 Segment 文件写满后,Kafka 会创建一个新的 Segment 文件,并继续写入数据。

索引文件:

每个 Segment 文件都有一个对应的索引文件,索引文件用于快速定位消息的位置。索引文件记录了消息的偏移量和位置信息。

索引文件的大小可以通过配置参数 log.index.interval.bytes 控制,默认为 4096 字节。

清理机制:

基于时间的数据保留(Retention Time):默认保留7天,超时删除,可以通过参数设置

基于大小的数据保留(Retention Size):默认情况下,数据保留大小为 -1,表示不启用基于大小的数据保留。一旦数据总量超过了这个大小限制,旧的数据会被自动删除。

kafka的高性能设计

日志存储结构:通过索引顺序读写,效率很高

分区结构:多消费者并行处理,可以提高处理速度

零拷贝技术:生产者和消费者可以直接访问磁盘上的数据,减少了数据在不同内存区域之间的复制。

页缓存:这种方法可以将文件直接映射到内存中,从而避免了频繁的 I/O 操作。

压缩技术:Kafka 支持消息压缩,可以显著减少存储空间和传输带宽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值