最近项目上有一个需要用到消息队列的功能,从网上找了一些php相关的kafka使用的教程和博客,大抵都是安装php的拓展librdkafka(这里就不讲这个拓展的安装方法了,搜一下还是有很多教程的),然后直接用这个拓展进行开发,但是我直接用这个拓展开发的时候,不知道为啥运行不起来,一直报错(应该是我太菜了,哈哈哈哈哈哈)…我从github上找了一些相关的包想直接用一下,但是发现很多包都是几年前的了,基本上都是kafka 0.x 版本的。
我看了一下最多star的一个包,链接是:https://github.com/weiboad/kafka-php/releases,看代码最新更新时间是两年前了,但是这个包的标签最新版本是V0.2.0.8,就是17年创建的了,我尝试用composer安装了一下,但是跟我项目的其它包冲突了,这个版本对psr/log的包限制在了1.0.2版本,但我其它包的限制是必须大于1.1,所以后面也没装下来用过,我看了一下master分支最新的代码是对这个包的限制也提升到了^1.0了,但是不确定master的代码有没有坑,不太敢用,后面看开发者有没有再更新吧,再更新应该是能用的,还有这个包有一个好处就是,不需要装librdkafka拓展。
后面我用了enqueue/rdkafka 这个包,链接:https://github.com/php-enqueue/rdkafka,这个包我能成功跑起来,这个包的基础依赖还是librdkafka的拓展,使用这个包前需要先装这个拓展,但是对拓展的版本有一个限制,最新版的0.10.1版本要求librdkafka的版本^3.0.3,我一开始装的是最新的4.*,后面重新装了一下,就可以跑起来了。
下面展示一下我测试的代码,只是能运行起来,但是还没达到我想要的预期
生产者
$connFactory = new RdKafkaConnectionFactory([
'global' => [
'metadata.broker.list' => '127.0.0.1:9092',
'socket.timeout.ms' => '50'
]
]);
$context =
PHP使用Kafka消息队列遇到的问题及解决初探

本文记录了作者在使用PHP集成Kafka作为消息队列时遇到的挑战,包括安装librdkafka扩展的困扰,旧版kafka-php包的版本冲突,以及enqueue/rdkafka包的使用体验。在尝试过程中,作者发现多消费者会同时接收所有消息,而期望的是不同消费者间的消息分配。设置group_id未解决问题,期待进一步的解决方案。
最低0.47元/天 解锁文章
923





