我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP Kafka 使用详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP Kafka 使用详解

一 安装PHP扩展
1 rdkafka 安装需要依赖 librdkafka , 所以先安装 librdkafka 自定义目录 下载扩展并且安装

git clone https://github.com/edenhill/librdkafka.gitcd librdkafka ## 找到自己的安装路径./configuremake && make install

2 安装 php-rdkafka 扩展

git clone https://github.com/arnaud-lb/php-rdkafka.gitcd php-rdkafka ## 找到自己的安装路径/www/server/php/72/bin/phpize ## 这里根据自己安装PHP的路径执行./configure --with-php-config=/www/server/php/72/bin/php-config  ## 这里根据自己安装的PHP版本情况填写路径make && make install

3 在PHP配置文件 php-ini 加上

extension = /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so ##找到自己使用的PHP路径 如果安装多个版本的PHP注意要找到项目使用的PHP版本

重启 php-fpm,查看phpinfo() 或者再命令行执行 php -m 查看扩展是否安装成功

在这里插入图片描述
在这里插入图片描述如果php-m找不到扩展 则需在安装的PHP下找到 /www/server/php/72/etc php-cli.ini (此路径为我的PHP安装路径 需要找到你自己的PHP安装路径) 在此配置文件最下端添加extension = /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so

三 安装 Kafka 服务 开放端口 kafka默认9092端口

1 直接到 kafka官网 , 下载最新的

下载后放在服务器项目的自定目录下 解压  可放在/www/server/ 目录下(Linux服务器)

2 使用命令下载

命令 如没有wget命令则需yum安装wget https://mirror.bit.edu.cn/apache/kafka/2.5.0/kafka_2.13-2.5.0.tgz解压,进入目录tar -zxvf kafka_2.13-2.5.0.tgz    cd kafka_2.13-2.5.0

四 启动Kafka服务(在放置kafka文件的根目录下执行命令)

1 使用安装包中的脚本启动单节点 Zookeeper 实例   (新版本的kafka已无需执行此命令)
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
2 使用 kafka-server-start.sh 启动 kafka 服务
 bin/kafka-server-start.sh config/server.properties //普通启动  bin/kafka-server-start.sh -daemon ./config/server.properties //项目上线后需要以守护进程的方式启动

3 创建topic:

bin/kafka-topics.sh --create --bootstrap-server 127.0.0.1:9092 --replication-factor 1 --partitions 1 --topic test发消息: bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test>hello>world监听消息:bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning

五 PHP 使用Kafka

1创建一个生产者类

class KafkaProducer{    public static $brokerList = '127.0.0.1:9092';    public static function send($message, $topic)    {        self::producer($message, $topic);    }    public static function producer($message, $topic = 'test')    {        $conf = new \RdKafka\Conf();        $conf->set('metadata.broker.list', self::$brokerList);        $producer = new \RdKafka\Producer($conf);        $topic = $producer->newTopic($topic);        $topic->produce(RD_KAFKA_PARTITION_UA, 0, json_encode($message));        $producer->poll(0);        $result = $producer->flush(10000);        if (RD_KAFKA_RESP_ERR_NO_ERROR !== $result) {            throw new \RuntimeException('Was unable to flush, messages might be lost!');        }    }}

2 创建一个消费类

class KafkaConsumer{    public static $brokerList = '127.0.0.1:9092';      public static function consumer()    {        $conf = new \RdKafka\Conf();        $conf->set('group.id', 'test');        $rk = new \RdKafka\Consumer($conf);        $rk->addBrokers("127.0.0.1");        $topicConf = new \RdKafka\TopicConf();        $topicConf->set('auto.commit.interval.ms', 100);        $topicConf->set('offset.store.method', 'broker');        $topicConf->set('auto.offset.reset', 'smallest');        $topic = $rk->newTopic('test', $topicConf);        $topic->consumeStart(0, RD_KAFKA_OFFSET_STORED);        while (true) {            $message = $topic->consume(0, 120*10000);            switch ($message->err) {                case RD_KAFKA_RESP_ERR_NO_ERROR:                    var_dump($message);                    break;                case RD_KAFKA_RESP_ERR__PARTITION_EOF:                    echo "No more messages; will wait for more\n";                    break;                case RD_KAFKA_RESP_ERR__TIMED_OUT:                    echo "Timed out\n";                    break;                default:                    throw new \Exception($message->errstr(), $message->err);                    break;            }        }    }}

问题汇总

No Java runtime present, requesting install

因为 kafka 需要 java 环境支持,所以安装 java 环境。可以到 javase-jdk14-downloads 选择自己的版本进行下载安装

创建 topic 出现:Replication factor: 1 larger than available brokers: 0

意思是至少有一个 brokers. 也就是说并没有有效的 brokers 可以用。你要确保你的 kafka 已经启动了

如果安装多个PHP版本 配置信息需要配置到项目使用的PHP版本

来源地址:https://blog.csdn.net/weixin_39104010/article/details/125313440

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP Kafka 使用详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-09-03

spring kafka @KafkaListener详解与使用过程

这篇文章主要介绍了spring-kafka @KafkaListener详解与使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-20

go操作Kafka使用示例详解

这篇文章主要为大家介绍了go操作Kafka使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08
2023-08-31

Kafka之kafka-topics.sh的使用解读

这篇文章主要介绍了Kafka之kafka-topics.sh的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-07

Python使用Kafka处理数据的方法详解

Kafka是一个分布式的流数据平台,它可以快速地处理大量的实时数据。在Python中使用Kafka可以帮助我们更好地处理大量的数据,本文就来和大家详细讲讲具体使用方法吧
2023-05-16

使用jmx exporter采集kafka指标示例详解

这篇文章主要为大家介绍了使用jmx exporter采集kafka指标示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Kafka之kafka-topics.sh如何使用

本文小编为大家详细介绍“Kafka之kafka-topics.sh如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Kafka之kafka-topics.sh如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
2023-07-05

【Kafka】Kafka Stream简单使用

一、实时流式计算 1. 概念 一般流式计算会与批量计算相比较。在流式计算模型中,输入是持续的,可以认为在时间上是无界的,也就意味着,永远拿不到全量数据去做计算。同时,计算结果是持续输出的,也即计算结果在时间上也是无界的。流式计算一般对实
2023-08-30

kafka生产实践(详解)

1.引言最近接触到一个APP流量分析的项目,类似于友盟。涉及到几个C端(客户端)高并发的接口,这几个接口主要用于C端数据的提交。在没有任何缓冲的情况下,一个接口涉及到5张表的提交。压测的结果很不理想,主要瓶颈就在与RDS的交互。一台双核,1
2023-05-31

基于SpringBoot 使用 Flink 收发Kafka消息的示例详解

这篇文章主要介绍了基于SpringBoot 使用 Flink 收发Kafka消息,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-07

PHP符号使用方法详解

PHP符号使用方法详解PHP作为一种流行的服务器端脚本语言,拥有丰富的符号用法,能够帮助开发人员更高效地编写代码。本文将详细介绍PHP中常用的符号及其具体的使用方法,并附上代码示例。连接符号(.)连接符号(.)用于连接两个字符串,可以
PHP符号使用方法详解
2024-03-15

Spring Boot整合Kafka教程详解

这篇文章主要为大家介绍了Spring Boot整合Kafka教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-10

Kafka常用命令之kafka-console-consumer.sh怎么使用

今天小编给大家分享一下Kafka常用命令之kafka-console-consumer.sh怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面
2023-07-05

Kafka的使用与特性怎么理解

这篇文章主要讲解了“Kafka的使用与特性怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kafka的使用与特性怎么理解”吧!1、面试官:可以简述下Kafka架构中比较重要的关键字吗?
2023-06-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录