写点什么

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

评论

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

How to solve the different brightness of LED display colors

Dylan

LED LED display

InfoQ 极客传媒 15 周年庆征文|Spring Cloud netflix概览及架构设计

No Silver Bullet

架构 6月月更 InfoQ极客传媒15周年庆 Spring Cloud netflix

TiDB 6.0 实战分享丨内存悲观锁原理浅析与实践

PingCAP

分布式数据库 TiDB

谷歌AI人格觉醒“喜提”热搜,我们找清华大佬聊了聊 AI 对话系统的惊人进展

硬科技星球

人工智能 谷歌 图灵测试

InfoQ 极客传媒 15 周年庆征文|手摸手教你在Windows安装Docker,一定要看到最后

迷彩

Docker 架构 运维 6月月更 InfoQ极客传媒15周年庆

【云计算】云计算平台是什么意思?可以划分为哪三类?

行云管家

云计算 云服务 私有云 云平台 云计算平台

从 keynote 大神到语雀画图大神,她是怎么做到的?

编辑器 思维导图 文档管理 企业知识管理

NFT卡牌盲盒链游系统dapp开发搭建

薇電13242772558

智能合约 NFT

数据智能基础设施升级窗口将至?看九章云极 DingoDB 如何击破数据痛点

九章云极DataCanvas

人工智能 数据库 数据 数据智能

深度合作 | TDengine + 华为云 Stack 强强联合打造高效物联网时序数据处理解决方案

TDengine

数据库 tdengine 时序数据库

保险APP适老化服务评测框架 发布

易观分析

保险

justcows奶牛理财dapp系统开发

开发微hkkf5566

技术分享| 云服务器的使用-nginx的安装及使用

anyRTC开发者

nginx centos 音视频 服务器

融云首席科学家任杰:数字游民和意识体,疫情将如何影响人类社会进化

融云 RongCloud

量化夹子机器人系统开发逻辑分析

开发微hkkf5566

物联网低代码平台如何添加报警配置?

AIRIOT

物联网 低代码开发 低代码平台

Wallys/Routerboard/DR344/WiFi/AR9344 FCC/CE/IC

wallys-wifi6

AR9344 802.11a

帮助文档在软件中的存在价值是什么?

小炮

web前端培训VUE开发者需要知道哪些实用技术点

@零度

Vue 前端开发

莫把暑假插错秧,代码哪有足球香,Alluxio足球青训营在线摇人!

Alluxio

微软 开源 足球 分布式, CCF开源高校行

Go语言入门基础之库源码文件

Damon

6月月更

十分钟带你入门Docker容器引擎

百思不得小赵

云原生 Docker 镜像 6月月更

二级等保要求几年做一次测评?测评项目有多少项?

行云管家

等级保护 等保测评 二级等保 等保二级

【Java Web 系列】Session的原理分析和使用细节

倔强的牛角

Java javaWeb session 6月月更

千亿参数“一口闷”?大模型训练必备四种策略

OneFlow

人工智能 模型训练 策略

Java—线程安全II

武师叔

6月月更

天翼云数据中台通过“数字政府智慧中台”评估

Geek_2d6073

服务网格项目Aeraki Mesh正式进入CNCF沙箱

York

开源 云原生 istio Service Mesh 服务网格 cncf

从行业角度看,数仓领域的未来是什么?

字节跳动数据平台

字节跳动 数据仓库 OLAP

2022年中国社区团购发展新动向

易观分析

社区团购

Nginx 配置和性能调优

CRMEB

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