Kafka开发编码规范

这篇具有很好参考价值的文章主要介绍了Kafka开发编码规范。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

啥为编码规范?

编程规范也就是编写出简洁、可维护、可靠、可测试、高效、可移植的代码,提高产品代码的质量。

规范与规则的区别:

• 规范是业内程序员统一形成的编码习惯,即你不遵循编程规范,但并不会影响你的代码‘跑’起来。

• 但规则不同,一但违反编程的规则,则会直接报错,代码编译也不能通过。

为什么要有规范?

适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化, 以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。 代码的字里行间流淌的是软件系统的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。

作用:

1. 减少排查问题的难度;

2. 方便团队成员之间能够相互backup,并能够快速上手并解决问题;

3. 统一的代码实现方式方便后续项目维护难度;

4. 减少漏洞代码不易被黑客攻击等;

kafka topic使用规范

命名规则: 比如,我们给kafka的topic命名为user_r2p10,表示user这个topic的副本因子(r)是2,分区数(p)是10。 这样后期在写消费者代码的时候,根据topic名称就知道分区有多少个,可以很方便的设置多少个消费者线程。

假如从业务层面考虑,如果是微服务并且拆了领域,命名可以是域-业务-操作,eg: order-stock-update, 全部小写,禁止使用大写,以横杠作为占位符并控制个数在3个内。

partition:这个可以根据服务部署的情况来定,可以设置partition的个数和consumer个数相等,但consumer的个数不要大于partition的个数,否则过多的consumer导致资源浪费,当topic存在大量的写入时,可以增大partition,利用多个consumer或多线程来提升消费的速度。

replica: 2-3个合适,过多会增加网络IO传输。

保留天数:可以默认设置72小时,对于写入量比较大的topic建议保留24小时,甚至够短(主要取决于磁盘大小)。

所在集群:如有多个集群建议相同业务使用同一个集群。

高峰期每秒写入量:预估一天中高峰期写入量,主要用来评估一个新业务上线后,在高峰阶段给kafka所造成压力所带来不可预知的问题。

消息体大小:最大不超过1MB,单条消息控制在10KB以内,10KB以内的性能测试指标最优。

存储空间:在保留天数内,预估总共占用的空间,单位G

producer:生产者所在的服务

consumer:消费所在的服务|对应的消费组id

状态:正常使用,已废弃

描述:简单描述topic的用途及业务场景

以上信息在实际工作中针对每个topic的使用情况希望是能够进行文档落地的,因为我们在使用kafka时,项目周期越长,topic越来越多,到后期topic成了一个黑盒,我不知道topic用在哪些业务场景,有哪些服务在进行消费,哪些topic实际已经不再用了。

Producer使用规范

1) 【强制】消息大小:不能超过1MB

2) 【推荐】acks参数严格保证可靠性可配置为all,保证高吞吐性可配置为1

3) 【推荐】retries参数可结合实际业务调整。注意:这些重试与客户端接收到发送错误时的重试没有什么不同。允许重试将潜在的改变数据的顺序,如果这两个消息记录都是发送到同一个partition,则第一个消息失败第二个发送成功,则第二条消息会比第一条消息出现要早。

producer配置

spring.kafka.producer.acks =1 (当前生产使用值,1为数据安全性和性能的折中方案值)

spring.kafka.producer.compression-type=none (如启用压缩推荐选择lz4可提高系统吞吐)

spring.kafka.producer.retries =0 (配置值如果大于0,请保证consumer的幂等性)

Comsumer使用规范

1) 【强制】确保处理完消息后再做消息commit,避免业务消息处理失败,无法重新拉取处理失败的消息。

2) 【强制】Kafka不能保证消费重复的消息,业务侧需保证消息处理的幂等性。

3) 【强制】auto.commit.enable需设置为false,避免在消息消费失败但因commit而使offset更新而导致消息丢失

4) 【推荐】consumer不能频繁加入和退出group,频繁加入和退出,会导致consumer频繁做rebalance,阻塞消费

5) 【推荐】consumer数量不能超过topic分区数,否则会有consumer拉取不到消息。

consumer配置

spring.kafka.consumer.auto-offset-reset = latest (如enable-auto-commit =false,建议此值配置为earliest,否则可能会出现丢失数据的情况)

spring.kafka.consumer.enable-auto-commit = true ( 建议使用false, 消费者接Acknowledgment入参)

spring.kafka.listener.ack-mode =MANUAL(BATCH为默认值,enable-auto-commit= false, ack-mode建议使用MANUAL)

spring.kafka.consumer.group-id = servicename(服务名)-group(默认group)

代码使用规范

  1. 可以写一个kafka mq的starter,提供一些标准的代码供其他服务使用,比喻kafka的发送,消息体的定义

eg: public <T extends AbstractEvent> void send(final T event)

如上AbstractEvent是消息体的base class,所有发送消息的业务调用send方法传入消息体时都需要extend AbstractEvent,

AbstractEvent包含字段:topic,dateTime,msgId等,msgId可以用来消费消息时做幂等的判断

  1. 在发送,消费的代码中尽量加入一些日志,在后续方便来定位问题,如果生产和消费的频率很高,这里需要注意控制日志输出的大小,

  1. 消费方在解析消息体时,尽量用统一的解析方式对string进行解析(不建议拿消息对象直接做业务处理,获取所需字段重新封装对象)

  1. 在生产者发送消息时,建议过滤掉字段值为null的属性,这样可以减少消息体的大小(这里也视业务情况来定)文章来源地址https://www.toymoban.com/news/detail-654479.html

到了这里,关于Kafka开发编码规范的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 写代码时候的命名规则、命名规范、命名常用词汇

    版权声明 这个大部分笔记是观看up主 红桃A士 的视频记录下来的,因为本人在学习的过程中也经常出现类似的问题,并且觉得Up主的视频讲解很好,做此笔记反复学习,若有侵权请联系删除,此推荐视频地址:【改善丑陋的代码】 https://www.bilibili.com/video/BV1844y1N7S8/p=28share_sou

    2024年02月10日
    浏览(47)
  • Springboot Kafka整合(开发实例、连接、配置TOPICS、发送消息)—官方原版

    Spring for Apache Kafka项目将Spring的核心概念应用于基于Kafka的消息传递解决方案的开发。我们提供了一个“模板”作为发送消息的高级抽象。 本快速教程适用于以下版本: Apache Kafka 客户端 3.3.x Spring Framework 6.0.x 最低 Java 版本:17 以下是一个不使用Spring Boot的应用程序示例;它既

    2024年02月06日
    浏览(62)
  • 编码规范之命名规范

    前言: textcolor{Green}{前言:} 前言: 💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 💞从这个专栏里面可以迅速获得Go的知识 今天的笔记是昨天的补充,对编码规范中的命名规范进行总结。主要包含 变量的命名规范 、 函数的命名规范 、 包的命名规范 。通

    2024年02月10日
    浏览(37)
  • kafka topic和topic权限操作

    创建 查询 删除 增加 移除 查询

    2024年02月12日
    浏览(37)
  • kafka--kafka的基本概念-topic和partition

    topic是逻辑概念 以Topic机制来对消息进行分类的,同一类消息属于同一个Topic,你可以将每个topic看成是一个消息队列。 生产者(producer)将消息发送到相应的Topic,而消费者(consumer)通过从Topic拉取消息来消费 kafka中是要求消费者主动拉取消息消费的,它并不会主动推送消息

    2024年02月12日
    浏览(45)
  • kafka删除topic

    1. 首先需要在config/server.properties中添加 delete.topic.enable=true 属性 2. 用topic list找到想要删除的topic名称 3. 执行删除命令

    2024年02月11日
    浏览(42)
  • Kafka 清空Topic

    测试环境某topic的数据格式发生了更改,需要将原有数据清空重新生产数据。 还需检查当前kafka topic对应的分区副本(假定单分区单副本)大小,用于验证数据是否已删除。 将过期时间设置为1秒 直到该文件夹显示大小是20K即证明数据已清理 同时需注意,数据清理时机受ser

    2024年01月16日
    浏览(42)
  • kafka topic分区数设定

    然后假设总的目标吞吐量是Tt,那么分区数=Tt / min(Tp,Tc) 例如:producer吞吐量 = 70m/s;consumer吞吐量 =100m/s,期望吞吐量 300m/s; 分区数 = 300 / 70 = 4或者5个分区

    2024年02月02日
    浏览(53)
  • Kafka/Spark-01消费topic到写出到topic

    消费者代码 注意点 consumerConfigs是定义的可变的map的类型的,具体如下 consumerConfigs.put(ConsumerConfig.GROUP_ID_CONFIG , groupId)是为了不限制groupId特意写的传参 是使用自带的kafka工具类createDirectStream方法去消费kafak 的数据,详细参数解释如下 Subscribe传参需要指定泛型,这边指定string,

    2024年02月09日
    浏览(34)
  • kafka消费多个topic的使用

    我们在业务中难免遇到一个kafka消费多个topic的消息,本文帮助大家如何在业务中用一个类消费多个topic消息 配置类1

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包