写点什么

让 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:006067

评论

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

超融合架构 “破壁”:从企业到数据中心的全能应用版图

智驱前线

一文教你Docker自建Jupyter Notebook,并用内网穿透实现远程访问

科技热闻

告别研发痛点!群核科技靠 “自动化左移” 重构质量效能,效能飙升有何秘诀?

杭州群核科技质量效能

大数据-65 Kafka 高级特性 Broker ISR 宕机重平衡 实测详解

武子康

Java 大数据 kafka 分布式 消息队列

企业 IM 即时通讯BeeWorks

BeeWorks

即时通讯 IM 私有化部署

CST帮助文档:SIMULIA网格处理软件---PowerDELTA

思茂信息

cst cst电磁仿真 CST Studio Suite

私有化部署局域网 IM:BeeWorks支持内网使用

BeeWorks

即时通讯 IM 私有化部署

Apache SeaTunnel 新定位!迈向多模态数据集成的统一工具

白鲸开源

大数据 开源 数据集成 多模态 Apache SeaTunnel

Java干货分享

codemonkey

#java #并发

VS Code Server本地Docker部署+贝锐花生壳内网穿透远程访问教程

科技热闻

英伟达被约谈?国产替代迎来新机遇

禅道项目管理

软件开发 信创 软件安全 国产化替代 禅道项目管理软件

开源能源管理系统应用前景:以 MyEMS 为例

开源能源管理系统

开源 能源管理系统

Prometheus 告警时为何无法获取现场值

巴辉特

Prometheus 监控告警 夜莺监控 运维监控 开源监控

跨文化冲突下的品牌舆情管理

沃观Wovision

出海企业 舆情监控 沃观Wovision 海外舆情监测

CAD中如何绘制圆弧?详细教程来了

在路上

cad cad看图 CAD看图王

哈尔滨等保测评中的 “神秘角色”:测评师

等保测评

7 月 SeaTunnel 社区狂飙:新特性、强优化、贡献者满分输出

白鲸开源

开源 数据同步 数据集成 Apache SeaTunnel

全前维护LED显示屏优势和选购指南

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家 户内led显示屏

ClkLog埋点与用户行为分析系统2.0:架构升级性能跃迁,限时优惠速来体验

ClkLog

开源 用户行为分析 CDP 客户画像 埋点分析系统

技术文档 | 使用 Spring AI 实现一个简单的 Pulsar MCP Server

AscentStream

MCP

Rust 性能提升“最后一公里”:详解 Profiling 瓶颈定位与优化|得物技术

得物技术

rust Profile rust语言

黑龙江等保测评全流程解析:从定级到整改的完整指南

等保测评

黑龙江等保测评核心指标解析:技术安全与管理安全的双重保障

等保测评

京东店铺所有商品API技术指南

tbapi

京东API 京东数据接口 京东店铺所有商品接口 京东店铺数据采集

昆仑万维「Matrix-Game 2.0」发布,国产开源的Genie 3来啦!

新消费日报

主流自动化测试框架的技术解析与实战指南

测吧(北京)科技有限公司

人工智能 智能体 测试开发 playwright selenium

超越预算,打开企业预算管理新思维

智达方通

全面预算管理 财务管理 成本预算管理

一文吃透 Promise 与 async/await,异步编程也能如此简单!建议收藏!

左诗右码

MyEMS:重塑能源管理,驱动高效节能新变革

开源能源管理系统

开源 能源管理系统

非凸科技受邀参加Community Over Code Asia 2025 Rust分论坛

非凸科技

通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统

阿里云大数据AI技术

全文检索 Milvus 混合检索 RAG应用 Sparse-BM25算法

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