当前位置: 首页 > 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;思考全面咱们的程序才能拿满分。 以下是完整…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...