2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

车联网 CAN Bus 协议介绍与数据实时流处理

EMQ映云科技

物联网 mqtt canbus

AIGC+办公|大厂争先抢占高位的AI,开始“卷”打工人了吗?

TE智库

人工智能 办公 打工人 AIGC 生成式AI

Kafka优化

数新网络官方账号

大数据 zookeeper

全球NDR市场“客户之声”首次发布:那些最挑剔的用户都选了谁?

极客天地

香港云主机为你的业务注入强大的云端动力!

一只扑棱蛾子

香港云主机

通过腾讯云SES服务发送邮件

排骨虾

腾讯云 #go 邮件通知

vivo 自研鲁班分布式 ID 服务实践

vivo互联网技术

雪花算法 分布式ID UidGenerator Tinyid Leaf

一年省七位数,得物自建HFDS在 Flink Checkpoint 场景下的应用实践

得物技术

大数据 阿里云 成本优化

k8s实战案例之部署redis单机和redis cluster

不在线第一只蜗牛

k8s

玖章算术与百度智能云达成合作,「NineData SQL 开发」成为百度智能云主推的数据库工具

NineData

数据库 百度智能云 云市场 玖章算术 NineData

Flume简述

数新网络官方账号

数据采集 flume

Android SDK安全加固问题与分析

百度Geek说

android 安全加固 企业号 6 月 PK 榜 6 月 优质更文活动

鲸鸿动能荣获2023 TopDigital 3项大奖

最新动态

行云管家- 积极探索“AI+信息安全”的创新融合

行云管家

网络安全 信息安全 智能 AI智能

使用堡垒机的意义你知道吗?能解决哪些问题?

行云管家

网络安全 信息安全 堡垒机 数据泄露

svn提交规范,与Git相得益彰

互联网工科生

git svn

拉链表的原理及简单实现

数新网络官方账号

大数据 拉链式散列表

BI商业智能工具成宠儿,企业降本增效优质工具

夜雨微澜

从“云原生”到“比Flink快十倍”:RisingWave的寻找自我认知之旅

吴英骏

数据库 sql 流处理

SpringBoot 2 种方式快速实现分库分表,轻松拿捏!

程序员小富

分库分表 springboot ShardingSphere

一次搞懂线性稳压器/LDO的工作原理

元器件秋姐

物理 电路 元器件 PCB 稳压器

华为云CodeArts TestPlan测试设计:守护产品开发质量之魂

云计算 软件开发 华为云 产品测试

解读 RocketMQ 5.0 全新的高可用设计

阿里巴巴云原生

阿里云 RocketMQ 高可用 云原生

玖章算术与百度智能云达成合作,「NineData SQL 开发」成为百度智能云主推的数据库工具

Baidu AICLOUD

一名中级程序员应该具备的技能

树上有只程序猿

编程 程序员 低代码 职业生涯 JNPF

如何使用 Terraform 和 Git 分支有效管理多环境?

SEAL安全

git Terraform

这些面试技巧,助你升职加薪、迎娶白富美

伤感汤姆布利柏

AI药物研发大赛培训来啦!清华博导讲解,高分基线等你来Fork!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

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