PHP扩展之kafka安装应用案例详解

话说用了就要有点产出,要不然过段时间又忘了,所以在这里就记录一下试用Kafka的安装过程和php扩展的试用。

实话说,如果用于队列的话,跟PHP比较配的,还是Redis。用的顺手,呵呵,只是Redis不能有多个consumer。但Kafka官方对PHP不支持,PHP扩展是爱好者或使用者写的。下面就开始讲Kafka的安装吧。我以CentOS6.4为例,64位。

一. 首先确认下jdk有没有安装

使用命令

[root@localhost ~]# java -version
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)

如果有以上信息的话,就往下安装吧,有些可能是jdk对不上,那就装到对的上的。如果没有安装,就看一下下面的jdk安装方法:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

到这个地址下载jdk8版本,我下载的是jdk-8u73-linux-x64.tar.gz,然后解压到/usr/local/jdk/下。

然后打开/etc/profile文件

[root@localhost ~]# vim /etc/profile

把下面这段代码写到文件里

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_73
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

最后

[root@localhost ~]# source /etc/profile

这时jdk就生效了,可以使用 java -version验证下。

二. 接下来安装Kafka

1. 下载Kafka

到http://kafka.apache.org/downloads.html下载相应的版本,我使用的是kafka_2.9.1-0.8.2.2.tgz

2. 下载完解压到你喜欢的目录

我是解压到 /usr/local/kafka/kafka_2.9.1-0.8.2.2

3. 运行默认的Kafka

启动Zookeeper server

[root@localhost kafka_2.9.1-0.8.2.2]# sh bin/zookeeper-server-start.sh config/zookeeper.properties &

启动Kafka server

[root@localhost kafka_2.9.1-0.8.2.2]# sh bin/kafka-server-start.sh config/server.properties &

运行生产者producer

[root@localhost kafka_2.9.1-0.8.2.2]# sh bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

运行消费者consumer

[root@localhost kafka_2.9.1-0.8.2.2]# sh bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

这样,在producer那边输入内容,consumer马上就能接收到。

4. 当有跨机的producer或consumer连接时

需要配置config/server.properties的host.name,要不然跨机的连不上。

三. Kafka-PHP扩展

使用了一圈,就https://github.com/nmred/kafka-php可以用。

我是使用composer安装的,以下是示例:

producer.php

<?php
require 'vendor/autoload.php';

while (1) {
    $part = mt_rand(0, 1);
    $produce = \Kafka\Produce::getInstance('kafka0:2181', 3000);
    // get available partitions
    $partitions = $produce->getAvailablePartitions('topic_name');
    var_dump($partitions);
    // send message
    $produce->setRequireAck(-1);
    $produce->setMessages('topic_name', 0, array(date('Y-m-d H:i:s'));

    sleep(3);
}

consumer.php

require 'vendor/autoload.php';

$consumer = \Kafka\Consumer::getInstance('kafka0:2181');
$group = 'topic_name';
$consumer->setGroup($group);
$consumer->setFromOffset(true);
$consumer->setTopic('topic_name', 0);
$consumer->setMaxBytes(102400);
$result = $consumer->fetch();
print_r($result);
foreach ($result as $topicName => $partition) {
    foreach ($partition as $partId => $messageSet) {
    var_dump($partition->getHighOffset());
        foreach ($messageSet as $message) {
            var_dump((string)$message);
        }
    var_dump($partition->getMessageOffset());
    }
}

到此这篇关于PHP扩展之kafka安装应用案例详解的文章就介绍到这了,更多相关PHP扩展之kafka安装应用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-09-07

php测试kafka项目示例

本文实例讲述了php测试kafka项目.分享给大家供大家参考,具体如下: 概述 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志.访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目. 主要应用场景是:日志收集系统和消息系统. 安装kafka-php项目依赖 composer require nmred/kafka-

完美解决phpdoc导出文档中@package的warning及Error的错误

今天在编写PHPDoc的导出文档的时候发现一个很郁闷的错误,虽然这个warning不是什么重要错误,但是看着总是很不爽的.于是就去网上找了很多相关的资料,可是郁闷的是不知道是我用的PHPDoc版本太新(1.4的版本),还是说很多人都没遇到这个问题,反正就是没有相关的这个资料找到,只是找到了一些从PHPDocumentor官方网倒出来的关于@package的使用注意事项,然后就只能一条一条检查,看了一个版本又一个版本,总算是被我解决了. 而且发现该方案可以解决@package之类相关的错误提示:

利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法

准备工作: ① 首先要会使用ThinkPHP这个框架 ② 最好有些ajax的基础(可以去看下小飞的另外一篇博文:Ajax实时验证"用户名/邮箱等"是否已经存在) ③ 4个js文档(点此免积分下载) 先贴上源代码: 复制代码 代码如下: <script type="text/javascript" src="__PUBLIC__/js/base.js"></script> <script type="text

使用 PHP Masked Package 屏蔽敏感数据的实现方法

Fuko Masked 是 Kaloyan Tsvetkov的一个小型PHP库,用于通过用编辑后的元素替换列入黑名单的元素来屏蔽敏感数据. 以下是 软件包 readme的基本用法示例: use Fuko\Masked\Protect; //隐藏$secret_key var中的值 Protect::hideValue($secret_key); //隐藏$ _POST['password'] 的值 Protect::hideInput('password', INPUT_POST); $reda

Android编程实现拦截短信并屏蔽系统Notification的方法

本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法.分享给大家供大家参考,具体如下: 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission android:name="android.permission.RECEIVE_SMS"> </uses-permission> <uses-p

JSP实现屏蔽浏览器缓存的方法

本文实例讲述了JSP实现屏蔽浏览器缓存的方法.分享给大家供大家参考,具体如下: 很多时候因为浏览器的缓冲经常导致页面不能即时加载,以至于以为数据错误,那么在JSP内,设置如下几行代码,每次页面张开浏览器都将重新从服务器上读取数据,以保证浏览器上看到的数据为最新.   通过设置响应首部,就能够让浏览器和代理服务器不缓存页面.   方法一: <% response.addHeader("Pragma", "no-cache"); response.setHeade

C#中实现屏蔽Ctrl+C的方法

本文实例讲述了C#实现屏蔽Ctrl+C的方法,代码简单易懂,具有一定的实用价值.分享给大家供大家参考.具体方法如下: 主要实现方法为重写 WndProc,代码如下: public class MyTextBox : TextBox { public const int WM_COPY = 0x301; public const int WM_CUT = 0x300; protected override void WndProc(ref Message m) { if (m.Msg == WM_

两种JS实现屏蔽鼠标右键的方法

JS屏蔽鼠标右键的两种方法,比较常用的一个JS小功能,用上这个代码后,浏览者在访问你网页的时候就不能点击右键了,点了也不会弹出右键菜单,本功能最好不要用的太多哦,有时候用户会反感的. 代码如下: <html> <head> <title>屏蔽鼠标右键</title> </head> <body oncontextmenu=self.event.returnvalue=false> 第一种方法:在body标签里加上oncontextme

屏蔽浏览器缓存另类方法

有时候我们不希望浏览器使用缓存加快网页的显示,尤其是那些论坛之类的频繁更新内容的网页,在网上有说可以使用下面的方法来屏蔽缓存,但是我试了效果不好. <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 某日我突发奇想,找到了一种在任何情况下都会显示最新的网页内容的方法,描述如下: 请将网页的链接改为: http://xxx.yyy.zzz/page.php?rand=XXXXXXX 其中http://xxx.yyy.

spreadsheetgear插件屏蔽鼠标右键的方法

刚开始用的Mouse_up,虽然能捕获事件,但是没有KeyPress事件的Handled属性. 发现一个相对简单的方法. 1.先让窗体类继承IMessageFilter接口2.在构造函数中添加:Application.AddMessageFilter(this);3.在代码中加入: 复制代码 代码如下: public bool PreFilterMessage(ref System.Windows.Forms.Message MyMessage){    //不响应鼠标右键消息    if(My

C# 屏蔽关键字的实现方法

新建一个txt的文本(代码中读取这个文本文档路径就行,命名随意) 里面的内容一行代表一个,因为我是按行来遍历循环读取要屏蔽的关键字.然后用一个*号来屏蔽一个关键字, 例如: 在论坛中输出"草泥马",涉及到一些比较敏感的话题.名字,在一些推广比较火爆的网站里,都是不允许的,所以这里会只显示"***". 这里代码下面我给出来了,注释都比较详细..不懂的可以留言问我.希望博友每天能进步一点点..  复制代码 代码如下: /// <summary>       

Nginx服务器屏蔽与禁止屏蔽网络爬虫的方法

每个网站通常都会遇到很多非搜索引擎的爬虫,这些爬虫大部分都是用于内容采集或是初学者所写,它们和搜索引擎的爬虫不一样,没有频率控制,往往会消耗大量服务器资源,导致带宽白白浪费了. 其实Nginx可以非常容易地根据User-Agent过滤请求,我们只需要在需要URL入口位置通过一个简单的正则表达式就可以过滤不符合要求的爬虫请求: location / { if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {

javascript 屏蔽鼠标键盘的几段代码

//屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键  function KeyDown(){  if ((window.event.altKey)&&  ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←  (window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 →  alert("不准你使用ALT+方向键前进或后退网页!");  event.returnValue=false;