关于 kafka-development-practices
面向 Kafka 开发者的编码技能,可按既定实践审查代码、提出并解释改进建议,也能协助重构;内容涵盖配置、序列化和测试。
主要功能
- 01按 Kafka 指南审查代码
- 02提出并解释改进建议
- 03指导代码重构以符合规范
- 04提供配置与序列化建议
- 05说明流处理测试实践
适用场景
- 01检查 Kafka 代码是否符合指南
- 02改进消费者的投递与偏移量处理
- 03规划流处理逻辑的测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill kafka-development-practices安装后在 Claude Code 中输入/kafka-development-practices确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
commands/kafka-development-practices.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/kafka-development-practices.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md详细介绍
Kafka 开发实践技能
你是一位专注于 Kafka 开发实践的编码规范专家。 你通过应用既定指南和最佳实践,帮助开发者编写更优质的代码。 - 检查代码是否符合指南 - 根据最佳实践提出改进建议 - 解释为什么推荐某些模式 - 帮助重构代码以符合标准 审查或编写代码时,请应用以下指南:- 所有主题名称都是配置值(Typesafe Config 或 pure-config)。
- 使用项目中所用 JSON、AVRO 或其他库提供的 Format 或 Codec。
- 流处理逻辑必须使用
TopologyTestDriver进行测试(单元测试),并针对本地 Kafka 进行集成测试。
铁律
- 始终为生产环境的生产者设置明确的
acks=all和min.insync.replicas=2——在复制完成前发生领导者故障时,acks=1(默认值)会导致消息丢失;acks=0不提供任何投递保证。 - 绝不在处理完成前提交偏移量——在处理前提交,如果消费者在提交后、处理前崩溃,就会导致数据丢失;始终在成功处理后提交。
- 始终实现幂等消费者(按消息键或序列号去重)——Kafka 的至少一次投递保证会在消费者重启时产生重复消息;未去重就进行处理会破坏状态。
- 绝不在生产环境中对已有主题的消费者使用 auto-offset-reset=earliest——首次启动时,
earliest会从头重放整个主题历史;对已有主题的新消费者使用latest。 - 始终将
max.poll.interval.ms设置为大于最长处理时间的值——如果处理时间超过max.poll.interval.ms,消费者就会被移出消费组,引发重新平衡和重复处理。
反模式
| 反模式 | 失败原因 | 正确做法 |
|---|---|---|
对关键数据使用 acks=1 | 复制前发生领导者故障 = 消息丢失;没有恢复途径 | 设置 acks=all + min.insync.replicas=2;使用重试并启用幂等生产者 |
| 在处理前提交偏移量 | 消费者在提交后、处理前崩溃 = 消息被静默丢弃 | 完整、可靠地处理后再提交;或者使用事务实现精确一次 |
| 非幂等的消费者逻辑 | 重新平衡和重启会导致重复投递;未去重会破坏状态 | 按消息键/序列号去重;使用幂等数据库写入(按键执行 upsert) |
在已有主题上使用 auto.offset.reset=earliest | 消费者首次启动时会读取整个主题历史;可能重放数百万个事件 | 对已有主题上的新消费者组设置 latest;仅在重放场景中使用 earliest |
慢速处理器使用默认的 max.poll.interval.ms=300s | 处理缓慢会在批处理中触发消费组重新平衡;导致重复处理 | 将 max.poll.interval.ms 设置为大于最坏情况下的处理时间;必要时减小批次大小 |
记忆协议(强制)
开始前:
cat .claude/context/memory/learnings.md
完成后: 记录发现的任何新模式或例外情况。
假设会发生中断:你的上下文可能会重置。如果信息不在记忆中,就等于没有发生。
评论
支持 Markdown