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的属性,这样可以减少消息体的大小(这里也视业务情况来定)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kafka中设置编码格式的方法是通过更改命令行的编码格式来实现的。默认情况下,命令行的编码格式是GBK(936)。要设置Kafka的编码格式,可以按照以下步骤进行操作: 1. 打开命令行窗口,并输入chcp命令查看当前的编码格式。 2. 找到并编辑Kafka的配置文件,通常为"server.properties"。可以通过搜索找到log.dirs=D:\Kafka\kafka_2.12-0.11.0.0\kafka-logs这一行,并进行编辑。 3. 在配置文件中,将编码格式修改为所需的格式,例如UTF-8。保存并关闭配置文件。 4. 重启Kafka服务以使更改生效。 请确保在修改配置文件之前备份配置文件,以防止意外情况发生。同时,在更改编码格式时,还应考虑与其他组件的兼容性。 参考文献: 引用自: 麦田怪圈是什么?它们是如何形成的? 引用自: 麦田怪圈是什么?它们是如何形成的? 引用自: 麦田怪圈是什么?它们是如何形成的?<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Windows安装Kafka并打包成服务及编码格式问题处理](https://blog.csdn.net/liming1134/article/details/89147915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [编码技巧——@KafkaListener的使用](https://blog.csdn.net/minghao0508/article/details/126231353)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code.song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值