2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

让 Kafka 支持队列功能:KIP-932 和 KMQ

作者:Rafal Gancarz

  • 2024-08-06
    北京
  • 本文字数:1437 字

    阅读完需:约 5 分钟

让 Kafka 支持队列功能:KIP-932和KMQ

Apache Kafka 社区正在积极推动一项名为 KIP-932(Kafka Improvement Proposal,KIP)的工作,目的是为这一广受欢迎的消息传递平台引入类似队列的功能。该提案引入共享群组的概念,用于实现协作式消息消费。与此同时,SoftwareMill 提供了一种替代解决方案,能够与现有的消费者群组机制无缝集成。


Apache Kafka 多年来一直是消息传递解决方案的行业标杆,这主要得益于其卓越的性能和可靠的持久消息传递能力。Kafka 的设计哲学是通过减少通信开销和数据转换来实现高吞吐量。然而,这种高性能以牺牲一定的灵活性为代价,不支持某些处理用例,例如个别消息的传递确认。


Apache Kafka 采用消费者群组来实现消息消费,将主题分区独占分配给消费者组中的消费者,并对分区偏移量进行跟踪。这种设计可能会引发队列头部阻塞问题,即单个消息处理缓慢或阻塞可能会影响甚至导致整个消费者应用程序挂起。此外,消息处理的并行度受限于分区数量,因此在创建分区之初必须仔细规划分区的数量,以确保能满足所需的吞吐量。



Apache Kafka 中的共享群组


KIP-932: Queues For Kafka 提案提出了一种创新方法,通过引入共享群组的概念来实现协作式消息消费。共享群组使用了不一样的分区分配策略,其特点是分配不是独占的,打破了消费者数量受分区数量的限制。它还简化并缩短了再均衡过程,并避免了在再均衡期间发生的“停止世界”现象。


此外,共享组允许消费者独立处理并确认消息,Kafka 能够更细粒度地跟踪消息的消费情况。当消费者请求消息时,Kafka 共享分区会返回一批标记为已获取的消息。这些消息会保持这一状态,直到消费者确认或达到处理时间限制。如果处理时间限制被触发,这些消息将重新变为可用状态。


Kafka 还负责跟踪消息的传递尝试次数,并在尝试次数超过阈值时将消息标记为已拒绝。目前,死信队列(Dead Letter Queue,DLQ)功能还不能用来捕获未传递的消息,但未来可能会加入这一特性。Kafka 代理负责维护并持久化所有内部状态,并通过单独的内部主题来跟踪个体消息的传递情况。共享群组功能计划在 Kafka 4.0 中推出。


对于那些想要立即体验新功能而不愿等待 KIP-932 在 Kafka 4.0 中发布的人来说,SoftwareMill 提供了一个可行的替代方案。SoftwareMill 首席研发官 Adam Warski 介绍了该解决方案:


KMQ 是一种利用 Kafka 消费者群组功能实现个别消息确认的模式,可以与任意 Kafka 版本一起运行。你可能会发现 KMQ 与共享群组的设计有一些相似之处。KMQ 在实现和部署方面要简单得多,这也意味着它只解决了消费者组的一些局限性。KMQ 完全是一种消费者端机制,与共享群组代理端的复杂逻辑不同。


KMQ 引入了一个额外的组件,即重新传递跟踪器,负责将消息标记为已交付和确认。这一机制类似于共享群组,只是操作发生在应用程序端。跟踪器利用了一个专门的“标记”主题和一个单独的消费者群组,当消息处理超过预定时间,这些消息会被重新发布回正在跟踪的主题。如果重新传递计数器(这是个体消息内部状态的一部分)超过配置的阈值,消息将被发布到 死信队列(DLQ) 主题。



KMQ 的模式设计


由于 KMQ 解决方案需要将标记发布到专门的主题,引入了一定的额外延迟,但该项目团队的性能基准测试表明,该方案能够实现与传统消费者群组相当的吞吐量。KMQ 模式的主要好处是它支持在当前可用的 Kafka 客户端版本中对每条消息进行单独确认,同时还能提供高性能的处理能力。然而,该模式并没有解决队列头部阻塞问题,并且并行度仍然受到分区数量的限制。


原文链接

https://www.infoq.com/news/2024/07/apache-kafka-queues/

2024-08-06 08:006147

评论

发布
暂无评论
发现更多内容

使用模版自动化 Amazon IoT 设备创建及证书注册过程

亚马逊云科技 (Amazon Web Services)

IoT

华为云GaussDB新产品特性亮相DTC2021,重磅新品开源预告

华为云开发者联盟

数据库 华为云 GaussDB 同城双集群 内存引擎

前端CI/CD上如何保证依赖安装速度达到优解?

梁龙先森

前端 构建脚本

利用 Cognizant APEx 2.0 和 Amazon IoT SiteWise Edge 提高产品质量

亚马逊云科技 (Amazon Web Services)

IoT

左手自研,右手开源,技术揭秘华为云如何领跑容器市场

华为云开发者联盟

Docker 开源 Kubernetes 容器 云原生

PassJava 开源 (六) :整合Spring Cloud Alibaba Nacos组件

悟空聊架构

28天写作 passjava 悟空聊架构 12月日更 naocs

1个通用工具平台+多个热点场景工具套件,助力开发者快速构建应用

华为云开发者联盟

云计算 低代码 开发工具 devcloud 应用构建

这一期总结

张老蔫

28天写作

Linux 命令 less 全知全会

hedzr

Linux less

深圳买房记

hackstoic

房地产

利用Amazon Lambda实现Amazon IoT设备证书的即时注册

亚马逊云科技 (Amazon Web Services)

IoT

Certificate Vending Machine – Amazon IoT 设备接入 Amazon IoT 平台解决方案

亚马逊云科技 (Amazon Web Services)

IoT

物联网场景中灵活实施对设备的控制管理

亚马逊云科技 (Amazon Web Services)

IoT

Amazon IoT Core 服务成本优化

亚马逊云科技 (Amazon Web Services)

IoT

HDZ城市行深圳站 | AIoT时代,如何抓住智联生活的战略机会点?

华为云开发者联盟

AIOT HarmonyOS 华为云IoT 智联生活 PLC-IoT

如何根据不同业务场景调节 HPA 扩缩容灵敏度

xcbeyond

Kubernetes 28天写作 12月日更

构建安防视频云存,和传统安防视频业务的烦恼说再见!

亚马逊云科技 (Amazon Web Services)

IoT

Amazon ES现更名为Amazon OpenSearch Service并支持OpenSearch 1.0

亚马逊云科技 (Amazon Web Services)

IoT

模块3作业

miliving

【CSS 学习总结】第四篇 - CSS 选择器-伪类和伪元素

Brave

CSS 12月日更

23《重学JAVA》--泛型

杨鹏Geek

Java25周年 28天写作 12月日更

2022年就要开始啦

搬砖的周狮傅

目标

收集、处理并监控设备数据——Amazon IoT SiteWise Edge“一网打尽”

亚马逊云科技 (Amazon Web Services)

IoT

给弟弟的信第23封|如何写一篇文章?

大菠萝

28天写作

🍃【Spring专题】「原理系列」SpringMVC的运行工作原理(补充修订)

码界西柚

spring springmvc 12月日更 流程解析

JavaScript 中对象和映射之间的 6 个区别

devpoint

JavaScript map Object 12月日更

Capgemini 如何利用 Amazon IoT 通过农业洞察监控农田

亚马逊云科技 (Amazon Web Services)

IoT

Servlet基础知识与新手常遇到的错及解决方法(01)

海拥(haiyong.site)

服务器 28天写作 12月日更

圣诞节

Tiger

28天写作

设计千万级学生管理系统的考试试卷存储方案

drizzle

「架构实战营」

【CSS 学习总结】第五篇 - CSS 变量 var

Brave

CSS 12月日更

让 Kafka 支持队列功能:KIP-932和KMQ_后端_InfoQ精选文章