NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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 )关注我们。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2016-06-21 19:003630

评论

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

Springboot过滤器和拦截器详解及使用场景

996小迁

Java 编程 架构 面试 springboot

MySQL 连接为什么挂死了?

华为云开发者联盟

微服务 数据 存储

互联网券商系统搭建建议书

软件开发大鱼V15988750073

国际配售 港股交易系统开发 证券交易系统 IPO系统开发 金融平台搭建

快进收藏吃灰!字节跳动大佬用最通俗方法讲明白了红黑树算法

小Q

Java 学习 架构 面试 算法

第九周学习性能优化 3 总结

三板斧

极客大学架构师训练营

《迅雷链精品课》第六课:主流区块链数据存储分析(一)

迅雷链

区块链

DataPipeline CPO 陈雷:实时数据融合之法,便捷可管理

DataPipeline数见科技

数据融合

接口测试学习之json

测试人生路

json 接口测试

DataPipeline CTO 陈肃:构建批流一体数据融合平台的一致性语义保证

DataPipeline数见科技

数据融合

前嗅教你大数据——史上最全代理IP服务商对比

前嗅大数据

大数据 数据采集 动态代理 静态代理 代理IP

京东T8Java架构师总结整理的15w字的Java面试手册,2021年金三银四不愁涨不了薪!

Java架构之路

Java 程序员 架构 面试 编程语言

阿里P8架构师吐血整理的《SpringBoot+Vue全栈开发实战》文档资料

Java架构之路

Java 程序员 架构 面试 编程语言

32核打赢AMD64核 英特尔Ice Lake为HPC提供强劲性能

E科讯

11月阿里Spring全家桶+MQ微服务架构笔记:源码+实战

小Q

Java 学习 程序员 面试 微服务

6. 自定义容器类型元素验证,类级别验证(多字段联合验证)

YourBatman

Hibernate-Validator Bean Validation 多字段联合验证

3年Java开发经验从阿里、美团、滴滴面试回来,想和Java程序员谈一谈感悟及面经

Java架构之路

Java 程序员 架构 面试 编程语言

阿里达摩院副院长亲自所写Java架构29大核心知识体系+大厂面试真题+微服务

Java架构追梦

Java 学习 阿里巴巴 架构 面试

DataPipeline 王睿:业务异常实时自动化检测 — 基于人工智能的系统实战

DataPipeline数见科技

大数据

【JDD京智大咖说】AI 未来,路在何方?NLP、CV 技术的探索与展望

京东科技开发者

人工智能 CV nlp

号外!5G+X联创营华为云官网上线,5G 创业春天来了!

华为云开发者联盟

华为 程序员 AI 5G

企业工作流设计原则及多项目整合开发注意事项

Marilyn

敏捷开发 工作流 企业开发

一周信创舆情观察(11.9~11.15)

统小信uos

架构师训练营 1 期 -- 第九周作业

曾彪彪

极客大学架构师训练营

DataPipeline CPO 陈雷:实时数据融合之道,博观约取,价值驱动

DataPipeline数见科技

数据融合

媲美物理机,裸金属云主机如何轻松应对11.11大促

京东科技开发者

云计算 容器 服务器 云主机

架构师训练营第九周作业

_

极客大学架构师训练营 第九周作业

Scrum指南这么改,我看要完蛋!

华为云开发者联盟

Scrum 敏捷 改版

AI技术在音乐类产品中的应用场景

HIFIVE音加加

人工智能 AI 音乐 音乐制作

入坑 docsify,一款神奇的文档生成利器!

沉默王二

docsify

DataPipeline CPO 陈雷:实时数据融合之法,稳定高容错

DataPipeline数见科技

数据融合

架构师训练营 1 期 - 第九周 - 性能优化 3

三板斧

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