Golang异步调度之Kafka应用实践

文章探讨了在业务解耦背景下,如何利用Kafka作为异步消息队列进行服务通信。选择了Kafka因其高可用性和高吞吐量特性,并关注使用Kafka可能带来的资源消耗、数据安全、学习成本等问题。解决方案包括使用kafkaProxy减轻业务机器负担,简化消息发送,以及kafkaWorker来集中处理消息,两者都旨在简化开发过程并增强系统稳定性。
摘要由CSDN通过智能技术生成

一.背景

目前,越来越多的业务需要进行解耦,逻辑拆分,服务管理,在一个业务流程中,我们可以把业务流程拆分为多个子流程,子流程我可以划分为两大类,同步子流程,异步子流程,同步子流程的运行是串行的,适合依赖上下文的业务场景,异步子流程是并行的,流程和流程之间无依赖,此篇文章我们着重讲一下异步流程的应用。

二.分析需求

  1. 服务通信通道的选择
    常见的服务之间异步通信的方式有redis队列,mysql,rabbitmq,kafka,我们选择了kafka,kafka是一个分布式高可用高吞吐量的消息队列,最初是用来收集日志使用,在互联网场景下,慢慢的也被用来做消息队列,它的完善集群机制能保障数据的安全性,并且kafka有很好的横向伸缩能力,安全的数据持久化方案,所以kafka是我们的最优选择,关于kafka详细的集群原理以及功能,这里不展开阐述,可以自己了解下。
  2. 业务场景的分析
    我们用kafka来连接服务,我们把每个请求变成一条消息,但是我们有很多很多服务,怎么能让服务和服务之间通过kafka高效的进行交互,只是我们要考虑的,有几项指标是我们着重关注的:
    ①.使用kafka是否会增加业务机器的资源消耗,例如连接,IO,内存,cpu
    ②.使用kafka是否会带来额外的不可控风险,能否保证数据安全
    ③.kafka除了连接服务和服务之外,是否有其他场景是我们目前架构所不具备的
    ④.怎么降低kafka的学习成本和使用成本
    ⑤.针对消息队列,怎么处理队列阻塞问题

三.解决方案

  1. 方案设计
    1

  2. 方案分析
    消息发送我们使用kafkaProxy来做kafka的代理,主要有以下方面考虑:
    ①.解决了连接消耗大,业务机器资源占用大问题
    ②.使开发者发kafka消息简单化,不用关注消息是否写到kafka,不用担心消息丢失
    ③.很好的与业务进行解耦,kafkaProxy发生故障,不会影响其他业务,kafkaProxy也可以集群中心化部署
    ④.开发者不用关心kafka的集群状态,不用做太多故障处理机制
    消息处理我们使用可kafkaWorker来实时处理,主要有以下方面考虑:
    ①.kafkaWorker使开发者消费kafka消息更简单,简单的配置就能使用
    ②.kafakWorker和业务深度解耦,插件化模板化管理业务,开发者只需要关心消息处理逻辑即可
    ③.开发者不用关心kafka的集群状态,不用做太多故障处理机制
    ④.借助kafka的分布式性能,kafkaWorker也可以灵活的支持了横向伸缩
    ⑤.kafakWorker针对队列消费阻塞,支持了失败队列的配置,可以设计不同功能kafkaWorker集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值