写点什么

LinkedIn 的工程师详述了生产环境下 Kafka 的调试和最佳实践

  • 2016-06-21
  • 本文字数:1359 字

    阅读完需:约 4 分钟

在本文中,LinkedIn 的软件工程师 Joel Koshy 详细阐述了他和一个工程师团队是如何解决生产环境下 Kafka 的两次事故的。这两次事故是由于多个产品缺陷、特殊的客户行为以及监控缺失的交错影响导致的。

第一个缺陷是在 LinkedIn 的变更请求跟踪系统中观察到的,部署平台认为这是从服务发出的重复邮件。Koshy 指出,其根本原因是由于消息格式的改变,和随后缓存加载在偏移管理器的终止,而这个偏移管理器已经被设置了一个旧的偏移量。由于这个主题分区上的低数据容量,日志压缩和清除触发器在部署的主题上从来没有被触发过。这导致一个旧的偏移量被当作消费者的起点,同时也使得以前已经消费过的消息被重新读取,并触发了重复的电子邮件。

第二个缺陷是在一个数据部署管道中,它里面的 Hadoop 推送作业器会发送数据到 Kafka 的非生产环境,然后通过 Kafka 集群复制到生产集群。在发现取回的偏移量没有有效检查点的时候,复制就被卡住了。它表明前一个检查的偏移量被丢掉了。Koshy 是这样描述根本原因的:

…由于日志压缩进程已经停止一段时间了,有几个较旧的偏移量仍然还在主题中。偏移缓存加载进程已经将它们加载到了缓存中。这本身是没有问题的,因为日志中更多的最新偏移量最终会覆盖那些旧的条目。问题出在旧偏移量的清除进程是在偏移加载的过程中开始的,偏移加载的过程需要较长的时间。旧条目清除之后会在日志末尾追加标记。而与此同时,偏移量的加载过程仍在进行,并会加载最近的偏移量到缓存中,但它只会在看到标记之后才会去除那些条目。这就解释了为什么偏移量实际上被丢失的原因。

Kafka 代理之间不清楚首席代理选举的规则,这会导致处于分区的首席代理在完成复制延迟过程中的失败会引起偏移量倒转。Kafka 消息的消费者发出读取指定偏移量的请求。消费者会对主题分区检查它们的偏移量,因此它们可以从最后一次检查点(消费者需要重启的点)重新开始。检查可以发生在很多时候,包括消费者失败、重启或者分区被加到主题里以及在消费者实例之间的分区分发规则需要改变的时候。如果一个消费者获取这个代理的主题日志之外的偏移关键字,它会收到 OffsetOutOfRange 的错误。消费者需要根据它们 auto.offset.reset 配置,来重新设置它们的偏移为最新或最早的有效偏移。

Koshy 指出,

重置为最早的偏移会引起重复消费,而重置为最新的偏移意味着可能会丢失在偏移复位和下一次读取之间已经到达的消息。

Koshy 还着重指出一些尽早发现偏移倒回的最佳实践,包括:通过监控集群中模糊不清的首席选举率,基于消费者延迟的监控和告警从而避免误报。监控日志压缩的指标(特别是最大脏读率传感器的),以及偏移管理的指标(如偏移缓存大小、提交率、组数传感器等)。偏移量自己被存在一个可复制、可分区、可压缩的日志中,它们与内部的 _consmer_offsets 主题相关联。Koshy 推荐在调试进程中尽早导出内部主题,从而避免日志压缩删除那些潜在有用的数据。特定的主题由消息组成,任何的时间偏移提交请求都会被发送到偏移管理代理中。在这种情况下,消费者和代理的日志也是可能有用的。

查看原文英文 LinkedIn Details Production Kafka Debugging and Best Practices


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-21 19:003978

评论

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

YashanDB:樊文飞院士观点速递|中国软件的未来:自强、自立、自信

数据库砖家

数据库

YashanDB|别彬彬:金融科技进入智能化深水区,数据+逻辑才是新范式

数据库砖家

数据库

办公常用的AI工具有哪些?8个流行的AI软件盘点!

职场工具箱

人工智能 PPT AIGC AI工具 AI生成PPT

YashanDB 知识库|虚拟机重启后 YMP 无法启动?先看看 8093 端口谁在用

数据库砖家

数据库

从架构设计到核心组件深度解析SpringCloudAlibaba一站式解决方案

程序员高级码农

架构师 SpringCloud Alibaba spring-cloud

YashanDB V23.3 正式发布:迈向企业核心系统的 1:1 替代新阶段

数据库砖家

数据库

【HarmonyOS】鸿蒙实现刻度尺

鸿蒙 HarmonyOS HarmonyOS NEXT 实践分享

麦杰工业数据底座亮相德阳,为工业设备管理贡献力量

麦杰研究院

云上玩转Qwen3系列之二:PAI-LangStudio搭建联网搜索和RAG增强问答应用

阿里云大数据AI技术

人工智能 rag PAI Qwen3 LangStudio

Voila:开源端到端全双工语音模型,延迟 195 毫秒;Gemini 2.5 Pro 预览版发布,视频理解能力提升丨日报

声网

活动报名丨在旧金山&硅谷,遇见 Voice Agent 开发者&创业者

声网

我在 Google L4 面试中的经验和教训

Nackydeng

程序员求职 谷歌面经 北美求职 google interview

《算法导论(第4版)》阅读笔记:p10-p10

codists

算法

当 CEO 患上了 AI 焦虑症(之四):NoETL,万数皆可问!

Aloudata

数据分析 数据开发 指标平台 ChatBI 智能问数

YashanDB 知识库|exp 导出 CSV 报错 YAS-00218?别忘了这一步

数据库砖家

数据库

YashanDB 知识库|导入 dump 报错 YAS-00218?试试这一招快速定位

数据库砖家

数据库

Nacos源码—Nacos集群高可用分析(二)

不在线第一只蜗牛

『Plotly实战指南』--在金融数据可视化中的应用(上)

量贩潮汐·WholesaleTide

Python

5月13日观测云发布会:这一次,我们不只是发布产品

观测云

产品发布会

YashanDB演讲纪要|崖山科技陈志标:坚持自主原创,走长期主义之路

数据库砖家

数据库

技术解读|YashanDB 共享集群 V23.3:从架构到底层的全面升级

数据库砖家

数据库

YashanDB 知识库|OM 仲裁节点异常?如何手动切换主备并重新纳管数据库集群

数据库砖家

数据库

HarmonyOS App 购物助手工具的开发与设计

网罗开发

鸿蒙 HarmonyOS HarmonyOS NEXT

第二章:数据治理的边界在哪里

数据小吏

数据治理

网络问题导致金仓数据库备机无法加入集群的排查与解决​

金仓技术

KingBase 金仓数据库

从彼得·蒂尔四象限看 Crypto「情绪变迁」:从密码朋克转向「标准化追求者」

TechubNews

类似亲家相亲,亲人朋友帮忙找对象的交友/app/小程序平台开发搭建

网站,小程序,APP开发定制

YashanDB王南演讲精要|YAC 集群:为核心系统而生的平替路径

数据库砖家

数据库

HarmonyOS App 如何实现全网比价工具

网罗开发

鸿蒙 HarmonyOS HarmonyOS NEXT

远程访问代理+内网穿透:火山引擎边缘网关助力自部署模型公网调用与全链路管控

火山引擎边缘云

网关 火山引擎 大模型 私有化部署 LLM

逻辑可视化的进化:从图灵完备到量子计算

代码制造者

AI编程

LinkedIn的工程师详述了生产环境下Kafka的调试和最佳实践_DevOps & 平台工程_Dylan Raithel_InfoQ精选文章