kafka消息消费转发代理模式在php中的使用实践_kafka代理转发_micweaver的博客-程序员宅基地

技术标签: 消息队列  

整体架构

kafka是我们目前主要使用的消息队列服务,之前一直使用redis队列(基于laravel自带的消息队列服务),但考虑到redis的不稳定性,我们慢慢将队列服务迁移到了kafka. 我们的业务开发语言是php,基于此我们介绍一下我们的kafka架构设计,以及使用过程中需要注意的点,我们还把相关的源代码放在了github上 kafka-client kafka-consumer-proxy

kafka作为一种消息队列服务,我们将消息发给kafka集群,然后通过消费者将消息读取出来,所以说kafka对消息的消费是拉模式(pull),关于消费拉(pull)或推(push)的模式优劣,kafka官方文档有说明,但是对于我们php业务模块来说,如果由每个业务去开发维护自己的消息消费者,成本较高且容易出错,所以我们开发了消息转发代理(proxy),将kafka的拉模式转为推模式,proxy将消息从kafka集群读出来,然后将消息转发给相应模块,相应模块只要提供http的接口即可接收消息。整体架构如下图所示:

架构描述

我们的proxy通过php实现,即不同队列(topic)使用不同的php进程组进行消费,这样各业务队列的消费是相互隔离的,一个队

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MICweaver/article/details/85041252

智能推荐

centos7环境下使用python脚本监控mongodb集群复制状态-程序员宅基地

centos7环境下使用python脚本监控mongodb集群复制状态centos环境下搭建了 MongoDB 副本集,需要对集群的复制状态进行监控获取集群的状态信息,集群是3个节点,没有设置仲裁者[root@eus-image-design-mongo01:/usr/local]# mongo --port 21000MongoDB shell version v3.4.24c..._环境:python2.7+centos7+mongodb3.4/3.6/4.0 副本集

消息队列及常见消息队列介绍_消息队列有哪些_coder i++的博客-程序员宅基地

转载 消息队列及常见消息队列介绍 一、消息队列(MQ)概述消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。消息队列主要解决了应用耦合、异步处理、流量削锋等问题。当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列_消息队列有哪些

sql 查询重复记录并删除-程序员宅基地

--查询重复记录select original_product_name,original_product_specfrom ent_sfl_product_mappingwhere deleted = 0group by original_product_name,original_product_spec having count(1) > 1--删除重复记录d...

简述spring中常有的几种advice?-程序员宅基地

在Spring中,Advice都是通过Interceptor来实现的,主要有以下几种:1. 环绕Advice://例子摘自Spring referencepublic interface MethodInterceptor extends Interceptor { Object invoke(MethodInvocation invocation) throws T..._下列哪项不属于spring的advice类型

我叫LD,我是PM,我在路上-程序员宅基地

今天看到一片文章《我是艺术家》,颇有感受,忍不住想给自己也做个自我表述,当时涌上心头的词就是:我叫LD,我是PM,我在路上,那就用它来做我这篇自述的标题吧。 我81年出生在湖南的一个普通小镇,童年的岁月在父亲工作的大院的里度过,87年在母亲工作的中心小学读书,92年因为父亲的单位迁移到HY市而转学到子弟小学读书,93年上市重点初中,96年上省重点高中。在我18岁前的生命中,除了学习成绩不

go语言学习笔记2------第一个Go语言程序-程序员宅基地

第一个GO程序开发第一个GO程序。具体步骤如下:1:选择文件—>新建 弹出如下对话框。 注意:程序名称,和程序保存位置不能输入中文2:新建完成后,开始输入代码。第一行:每个Go源代码文件的开头都是一个package声明,表示该Go代码所属的包。 Go语言中是通过包来对代码进行管理的。那么什么是包呢?我通过一个例子来解释一下包的概念。例如:有一家公司叫“京东“”,该...

随便推点

vue实现tab切换并带切换样式的效果_vue tabs 默认tab就先刷新其他tab样式_小阳生煎的博客-程序员宅基地

如图所示<template> <div class="home" @touchmove.prevent @mousewheel.prevent> <div class="header"> <div class="header-one"> <div></div> </div> <div class="header-two"> <_vue tabs 默认tab就先刷新其他tab样式

flume报java.io.IOException: Not a data file的ERROR-程序员宅基地

flume清洗时报错 java.io.IOException: Not a data file,错误如下图:opening file 的文件明明是一个数据文件,非要说不是数据文件。没办法,追踪错误,查找源码去。。。结果在 package org.apache.avro.file中的 DataFileStream 类的initialize(InputStreamin)

android获取阅读进度,Android 进度条-程序员宅基地

ProgressBar是一个进度条控件,一般在需要做某个比较耗时的操作的时候,向用户展示执行进度,以免用户以为已经失去响应。常用属性:style  设置进度条的样式visible 是否显示进度条1、圆形进度条一个圆形进度条,不断旋转。1常用样式:Widget.ProgressBar.Small/Large/Inverse。没有Medium,效果上来看,Inverse相当于Medium。也..._android 获取progressminmax

I3D模型_2017_CVPR-程序员宅基地

作者的观点:若在足够大的视频动作识别数据集上训练(Kinetics),是否能提升模型在其他数据集(HMDB-51,UCF-101)上的表现呢?论文核心内容:对于不同模型,这种方法(见观点)提升性能程度相差很大,于是提出 Two-Stream Inflated 3D ConvNet ( I3D ) 模型 实验分析,现有最好的动作识别方法在数据集Kinetics上的表现,其次是在对..._i3d模型

HackTheBox - ScriptKiddie(CVE-2020-7384)_z4yn:)的博客-程序员宅基地

ScriptKiddie#0 信息收集Namp 扫描端口,根据端口开放情况切入点应该在5000端口上。─[sg-vip-1]─[10.10.14.19]─[htb-z4yn@htb-2t3aamavbq]─[~]└──╼ [★]$ nmap 10.10.10.226 -p-Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-20 02:13 UTCNmap scan report for 10.10.10.226Host is up.._cve-2020-7384

计算机组成原理——计算机运算部分_、y从-程序员宅基地

存储容量与地址总线之间的关系1kb=210b 需要10根地址总线1Mb=210kb = 210*210b =220b需要20根地址总线1GB=210Mb=210*210*210b=230b 需要30根地址总线2GB=2 *230b=231b需要31根地址总线计算机系统性能评价1.非时间指标:机器字长:指机器一次能处理的二进制位数。总线宽度:数据总线一次能并行传送的最大信息位数。(..._、y从