当前位置: 首页 > news >正文

windows下php安装kafka

下载zookeeper

Kafka 依赖 Zookeeper 进行分布式协调,所以需要下载Zookeeper ,当然你也可以使用kafka包里自带的一个默认配置的 Zookeeper。这里我们单独下载一个

  1. 访问Zookeeper官方下载页面
  2. 在页面中找到最新的稳定版本,点击相应的下载链接,下载 Zookeeper 的压缩包文件
    在这里插入图片描述
  3. 解压 Zookeeper,将下载的压缩包文件解压到一个目录,例如 D:\zookeeper。解压后,目录结构类似于:
D:\zookeeper
├── bin
├── conf
├── lib
├── logs
└── ...
  1. 配置 Zookeeper,打开D:\zookeeper\conf 目录,将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg。使用文本编辑器(如 Notepad++)打开 zoo.cfg 文件,并检查以下配置:
tickTime=2000
dataDir=D:/zookeeper/data
clientPort=2181
  • tickTime 是 Zookeeper 服务器和客户端之间的心跳时间(以毫秒为单位)。
  • dataDir 是 Zookeeper 存储数据的目录,确保路径是有效的并且存在。
  • clientPort 是 Zookeeper 服务的端口,默认是 2181。
    确保 D:\zookeeper\data 目录存在,如果不存在,请手动创建。
  1. 启动 Zookeeper,打开命令提示符(win+R输入cmd),切换到D盘,进入zookeeper\bin,执行zkServer.cmd
  2. 在bin目录下,执行zkServer.cmd status可以看到 Zookeeper 的运行状态,
    执行zkCli.cmd -server localhost:2181可以连接到 Zookeeper 客户端

下载kafka

  1. 访问Kafka 官方下载页面下载最新稳定版本的 Kafka 二进制文件在这里插入图片描述
  2. 解压 Kafka
    将下载的 Kafka 压缩包解压到一个目录,例如 D:\kafka。
  3. 启动 Kafka 服务器,打开一个新的命令提示符窗口,进入 Kafka 的 bin\windows 目录:
cd D:\kafka\bin\windows

使用以下命令启动 Kafka 服务器:

kafka-server-start.bat ..\..\config\server.properties

kafka的启动需要加载config\server.properties的配置。

窗口不要关闭,至此,你已启动了zookeeper和kafka。当然你也可以用kafka自带的zookeeper。自带的启动方式为:
打开命令提示符,进入 Kafka 的 bin\windows 目录:

cd D:\kafka\bin\windows
zookeeper-server-start.bat ..\..\config\zookeeper.properties

注意,如果你已经启动了单独下载安装的zookeeper就不要再启动kafka自带的zookeeper了,否则可能出现端口被占用的情况,如果出现端口被占用,请杀死对应的进程。(如果失败请检查2181端口是否被占用,netstat -ano | findstr :2181,如果有被占用,结束进程taskkill /F /PID 1234。。这里的1234pid要写实际的pid)

安装PHP 的 Kafka 扩展

为了让 PHP 能够与 Kafka 交互,你需要安装 rdkafka 扩展,并且可以选择合适的 Kafka PHP 客户端库,如 longlang/phpkafka。

  1. 安装 rdkafka 扩展
    访问 PECL: rdkafka 并下载适用于你 PHP 版本的 php_rdkafka.dll 文件。
    在这里插入图片描述
    在这里插入图片描述
    点击查看自己对应的版本,下载对应的包。确定php的版本号,操作系统位数,nts或者ts。如果不清楚,可以使用phpinfo来查看自己的信息。或者直接使用php -v
    在这里插入图片描述
  2. 解压文件,主要用到2个dll文件,将librdkafka.dll放在php的安装目录下,比如D:\phpstudy_pro\Extensions\php\php7.4.3nts,将php_rdkafka.dll放在ext中,比如
    D:\phpstudy_pro\Extensions\php\php7.4.3nts\ext
  3. 编辑 php.ini 文件,开启rdkafka扩展
extension=php_rdkafka.dll

或者

extension=rdkafka

保存文件,重启php

安装 Kafka PHP 客户端库

进入你的php项目,使用composer安装longlang/phpkafka,或者nmred/kafka-php
longlang

composer require longlang/phpkafka

nmred

composer require nmred/kafka-php

如果你的composer报错,比如laravel框架中,laravel/horizon的错误,是缺少PCNTL扩展,这个扩展windows下不支持,可以忽略平台使用

composer require longlang/phpkafka --ignore-platform-reqs

nmred

composer require nmred/kafka-php --ignore-platform-reqs

以下使用nmred 举例

配置和使用 Kafka

创建kafka的配置文件

laravel 中在config新增一个kafka.php

<?phpreturn ['brokers' => env('KAFKA_BROKERS', 'localhost:9092'),'consumer_group_id' => env('KAFKA_CONSUMER_GROUP_ID', 'laravel-consumer-group'),'topics' => ['test-topic' => ['partition' => 0,'replica' => 1,],],
];

创建 Kafka 生产者

创建一个生成类

<?phpnamespace App\Http\Controllers;use RdKafka\Producer;class KafkaProducerController extends Controller
{public function produce(){$conf = new \RdKafka\Conf();$producer = new Producer($conf);$producer->addBrokers(config('kafka.brokers'));$topic = $producer->newTopic('test-topic');$topic->produce(RD_KAFKA_PARTITION_UA, 0, 'Hello Kafka');$producer->flush(10000);return 'Message produced successfully';}
}

配置好对应的api路由后,访问一次就是生产一条消息
在这里插入图片描述

创建kafka消费者

这里使用的是laravel框架,需要在app/console/commands下创建一个定时任务,

<?phpnamespace App\Console\Commands;use Illuminate\Console\Command;
use RdKafka\Consumer;
use RdKafka\TopicConf;class KafkaConsumer extends Command
{protected $signature = 'kafka:consume';protected $description = 'Consume messages from Kafka';public function handle(){$conf = new \RdKafka\Conf();$conf->set('group.id', config('kafka.consumer_group_id'));// 开启自动提交偏移量$conf->set('enable.auto.commit', 'true');$consumer = new Consumer($conf);$consumer->addBrokers(config('kafka.brokers'));$topicConf = new TopicConf();$topicConf->set('auto.offset.reset', 'latest');$topic = $consumer->newTopic('test-topic', $topicConf);// 开始从指定分区消费消息,注意不再从头开始。$topic->consumeStart(0, RD_KAFKA_OFFSET_STORED);while (true) {// 消费消息,等待时间为1000ms。$message = $topic->consume(0, 1000);// 检查是否成功消费到消息,并且没有错误。if ($message && $message->err == RD_KAFKA_RESP_ERR_NO_ERROR) {// 输出消息的内容。$this->info($message->payload);}}}
}

在这里插入图片描述
已经拿到消息了,具体的kafka的操作这里不细讲,只注重windows下本地开发环境kafka的安装。记得在消费时,开启你的zookeeper和kafka。

相关文章:

windows下php安装kafka

下载zookeeper Kafka 依赖 Zookeeper 进行分布式协调&#xff0c;所以需要下载Zookeeper &#xff0c;当然你也可以使用kafka包里自带的一个默认配置的 Zookeeper。这里我们单独下载一个 访问Zookeeper官方下载页面在页面中找到最新的稳定版本&#xff0c;点击相应的下载链接…...

【wiki知识库】09.欢迎页面展示(浏览量统计)SpringBoot部分

&#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 大家好&#xff0c;我是熊哈哈&#xff0c;这个项目从我接手到现在有了两个多月的时间了吧&#xff0c;其实本来我在七月初就做完的吧&#xff0c;但是六月份的时候生病了&#xff0c;在家里休息了一个月的…...

数据分析与应用:微信-情人节红包流向探索分析

目录 0 需求描述 1 红包发送方用户的基本信息缺失率有多高?(即有多少红包发送方用户无法在用户基本信息表中匹配? 2 哪一组红包金额的拒收率最高? 3、最受二线城市欢迎的红包金额为?(即发出次数最多) 4 北上广深 4 大城市中,哪座城市的男性用户发出的 520 红包比例…...

SQL,获取 ID 的历史状态

sas系统的表tb存储病人的医疗历史记录&#xff0c;当Visit_codeSurgery时表示手术&#xff0c;Visit_codeOffice表示咨询&#xff0c;每个病人有多条Visit_code&#xff0c;有时只有Surgery或只有Office&#xff1a;IdVisit_DateVisit_codeA305/15/2004SurgeryA302/5/2005Offic…...

阅文集团:摇不动的IP摇钱树

把IP当成摇钱树&#xff0c;要做“东方迪士尼” 今天我们聊——阅文集团 《热辣滚烫》《庆余年2》《与凤行》和《玫瑰的故事》很熟悉吧&#xff1f;影视“四连爆”&#xff0c; 阅文集团交出一份亮眼半年报&#xff0c;时隔两年&#xff0c;重启增长。 跟IP相关业务对收入贡献…...

ETL数据集成丨将SQL Server数据同步至Oracle的具体实现

一、背景 在构建企业级数据架构时&#xff0c;将SQL Server数据库的数据同步至数仓数据库&#xff08;如Oracle&#xff09;是一项至关重要的任务。这一过程不仅促进了跨系统数据的一致性与可用性&#xff0c;还为数据分析、商业智能以及决策支持系统提供了坚实的数据基础。 …...

20240814软考架构-------软考51-55答案解析

每日打卡题51-55答案 51、【2017年真题】 难度&#xff1a;一般 系统移植也是系统构建的一种实现方法&#xff0c;在移植工作中&#xff0c; 需要最终确定移植方法。 A.计划阶段 B.准备阶段 C.转换阶段 D.验证阶段 答案&#xff1a;A 解析&#xff1a; 移植工作大体上分为计划…...

JavaEE 的入门

1. 学习JavaEE Java EE(Java Platform Enterprise Edition), Java 平台企业版. 是JavaSE的扩展, ⽤于解决企业级的开 发需求, 所以也可以称之为是⼀组⽤于企业开发的Java技术标准. 所以, 学习JavaEE主要是学习Java在 企业中如何应⽤. 前⾯学习的是Java基础, JavaEE 主要学习Jav…...

vue3+ts 前端word文档下载文件时不预览直接下载方法(支持 doc / excel / ppt / pdf 等)

前端word文档下载文件时不预览直接下载方法支持 doc / excel / ppt / pdf 等 根据需要&#xff0c;要实现一个下载文档的需要 最简单的方法就是使用a标签 如果是相同域可以直接下载&#xff0c;但如果是不同域的&#xff0c;就会先打开一个预览页&#xff0c;在预览页再点下载…...

Java 空值与null 形参与实参学习

Java系列文章目录 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 空值与null的区别4.1.1 空值&#xff08;Empty Value&#xff09;4.1.2 Null 4.2 形参与实参区别 五、总结&#xff1a;5.1 学习总结&#xff1a; 一、前…...

【QT常用技术讲解】QTableView添加QCheckBox、QPushButton

前言 QT展示列表信息的时候通常用到列表&#xff08;比如用户信息、机构信息、设备信息等菜单&#xff09;&#xff0c;当需要对某列进行修改、删除操作时&#xff0c;就需要加入按钮&#xff08;QPushButton&#xff09;&#xff0c;当需要对多列进行右键菜单操作时&#xff0…...

linux监控命令

在 Linux 中&#xff0c;有许多命令可以用于监控系统的性能和状态。以下是一些常用的监控命令及其用途&#xff1a; 1. top​ 和 htop​ top ​top​ 命令显示当前系统中运行的进程列表及其资源使用情况。 top​​ ‍ htop ​htop​ 是 top​ 命令的增强版&#xff0c;提…...

SpringBoot入门笔记

本文是看黑马老师讲课视频学习笔记整理 目录 入门案例 基于IDEA联网 基于Springboot官网创建 基于阿里云创建项目 手工创建 隐藏文件 入门案例解析: parent​编辑 starter 引导类 内嵌tomcat 入门案例 基于IDEA联网 RestController RequestMapping("/books&…...

python 华为od 单词接龙

sd[word,dd,da,dc,dword,d] # 计算出下一个接龙单词 def jl(sd,st):# sd.remove(st)sd list(set(sd))sends list(st)[-1]lg []sd.sort()for i in sd:if i.startswith(sends):lg.append((i, len(i)))if lg[]:return 0,0lg.sort(keylambda x: x[1],reverseTrue)maxlen lg[0][…...

Vue+Echart实现地图省市区三级下钻

采用在线地图数据&#xff0c;整体简约&#xff0c;扩展也方便 参考 <template><div><div ref"mapContainer" style"width: 100%; height: 600px;"></div><button click"goBack">返回上一级</button></…...

Apache Tomcat 信息泄露漏洞排查处理CVE-2024-21733)

一、漏洞描述 Apache Tomcat作为一个流行的开源Web服务器和Java Servlet容器并用于很多中小型项目的开发中。其中,Coyote作为Tomcat的连接器组件,是Tomcat服务器提供的供客户端访问的外部接口,客户端通过Coyote与服务器建立链接、发送请求并且接收响应。 近日发现Apache To…...

51单片机-LED实验

实现了按下独立按键&#xff0c;LED灯亮&#xff0c;松开独立按键&#xff0c;LED灯灭的功能 #include <8051.h>void delayms(unsigned char t){unsigned char i,j;i900;jt;do{jt;while (j--){/* code */}}while(i--); }void main(){// P2_01;while (1){if(P3_00){delay…...

无人机开启农林植保新篇章

嘿&#xff0c;小伙伴们&#xff0c;你们知道吗&#xff1f;无人机已经悄悄在农业领域大展拳脚&#xff0c;成为现代农业的“黑科技”新宠儿啦&#xff01; 想象一下&#xff0c;广袤的田野上空&#xff0c;无人机如同勤劳的蜜蜂&#xff0c;精准高效地完成着各项任务&#xff…...

第N4周:NLP中的文本嵌入

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 任务要求&#xff1a;加载第N1周的.txt文件&#xff0c;使用Embeddingbag与Embedding完成词嵌入 第N1周的.txt文件的名称为“任务文件.txt”&#xff0c;内容为&#xff1a; 比较直观的编码方式是采用上…...

C++高精度减法

高精度减法其实跟加法差不多&#xff0c;首先就是需要逆序存入整数数组&#xff0c;其次就是做运算&#xff0c;最后就是删除前导0逆序输出。 不过在做高精度减法需要考虑一下两个数的关系是有三种的&#xff0c;a>b,a<b ab;思考全面咱们的程序才能拿满分。 以下是完整…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...