写点什么

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:004059

评论

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

TCMalloc 技术细节详解

KaiwuDB

KaiwuDB TCMalloc

参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

阿里云大数据AI技术

阿里云 AIGC

科兴未来|2023”福地句才”海外人才创业大赛

科兴未来News

3 个技巧,让你像技术专家一样解决编码问题

LigaAI

程序人生 技术专家 技术人成长 问题分析及解决 企业号 6 月 PK 榜

Win服务器图床配置

路北路陈

6 月 优质更文活动

对线面试官-线程池(四)

派大星

Java 面试题

MySQL 8.0.29 instant DDL 数据腐化问题分析

GreatSQL

greatsql greatsql社区

科兴未来|2023年扬中高层次人才创新创业大赛

科兴未来News

电路板电镀中4种特殊的电镀方法

华秋PCB

经验 电路板 焊接 PCB板 电镀

揭秘Spring依赖注入和SpEL表达式

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

当GaussDB遇上了毕昇编译器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

“数字创新产品课程”7月29-30日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum

AIGC时代,设计软件应该做什么?丨AIGC X 企业服务

ToB行业头条

“敏捷教练进阶课程”7月22-23日 ·A-CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

敏捷教练

智慧生活垃圾焚烧发电厂Web3D可视化平台

2D3D前端可视化开发

物联网 数字孪生 三维可视化 工业组态 智慧垃圾焚烧发电厂

NFTScan | 06.05~06.11 NFT 市场热点汇总

NFT Research

NFT 热点

从分布式到微服务解密“架构”原理与实战笔记

小小怪下士

Java 程序员 分布式 微服务

精耕丝路,智胜全球 | 新华三助力中企跑好“出海”赛道

新消费日报

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

【零售电商系列】走进亚马逊之自建仓储&物流

小诚信驿站

6 月 优质更文活动

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

BeeWorks

Java代码性能测试实战之ContiPerf

javalover123

单元测试 性能测试 压测 JUnit Java'

Navicat Premium将关系和实体添加到概念模型的方法

背包客

macos MySQL 数据库 Mac 软件 Navicat Premium

正式启动|2023中国高校计算机大赛—大数据挑战赛火热报名中!

云智慧AIOps社区

大数据 AI 算法 运维 智能运维

DevEco创建项目时的错误解决

路北路陈

6 月 优质更文活动

分享几款 Mac 上非常好用的的免费软件

搞大屏的小北

数据可视化 数据库工具 截图软件 视屏转 gif 视频号下载

Web网页端IM产品RainbowChat-Web的v5.0版已发布

JackJiang

网络编程 即时通讯 IM

今年LED显示屏市场趋势

Dylan

商业 广告 娱乐 数字化 LED显示屏

Sentinel熔断降级的规则及实现原理

互联网架构师小马

Java sentinel 熔断降级

如何理解 REST 和 RPC 之间的差异?

Apifox

程序员 RPC Rest 协议 RPC调用

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