Linux下安装Kafka和PHP的相关扩展

Linux下安装Kafka和PHP的相关扩展

以下操作在 Ubuntu 16.04 下进行,其他系统可能略有不同:

安装kafka

  1. 配置防火墙,开启9092端口,编辑 \etc\iptables.up.rules 文件,添加一行:
1
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9092 -j ACCEPT

保存后执行:

1
iptables-apply/etc/iptables.up.rules
  1. Ubuntu 16.04 自带 JDK,其他系统如果未安装则需要安装。

  2. 安装 kafka

kafka 最新的发行版本下载地址可以在 http://archive.apache.org/dist/kafka/ 里找。

1
2
3
4
cd/tmp
wget http://archive.apache.org/dist/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz
tar-xzvf kafka_2.11-0.10.0.0.tgz
mvkafka_2.11-0.10.0.0/usr/local/kafka
  1. 启动 zookeeper 和 kafka

这两者的配置这里就先不研究了,直接启动试试看:

1
2
nohup/usr/local/kafka/bin/zookeeper-server-start.sh/usr/local/kafka/config/zookeeper.properties &
nohup/usr/local/kafka/bin/kafka-server-start.sh/usr/local/kafka/config/server.properties &

安装PHP相关扩展

zookeeper 扩展

  1. 安装 libzookeeper_mt
1
2
3
4
5
6
cd/tmp
wget -N http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz;tarzxvf zookeeper-3.4.6.tar.gz;rm-f zookeeper-3.4.6.tar.gz
cdzookeeper-3.4.6/src/c
./configure--prefix=/usr/local/zookeeper
make
sudomakeinstall
  1. 安装 PHP 的 zookeeper 扩展:
1
2
3
4
5
6
7
8
cd/tmp
gid clone https://github.com/jbboehr/php-zookeeper.git
# 如果是 PHP7:
# git checkout php7
phpize
./configure--with-php-config=/usr/local/php/bin/php-config --with-libzookeeper-dir=/usr/local/zookeeper
make
sudomakeinstall

然后就可以使用这个包了:https://github.com/nmred/kafka-php

rdkafka 扩展

  1. 安装 librdkafka:
1
2
3
4
5
6
cd/tmp
wget -N https://github.com/edenhill/librdkafka/archive/master.zip -O librdkafka.zip; unzip librdkafka.zip; rm-f librdkafka.zip
cdlibrdkafka-master
./configure
make
sudomakeinstall
  1. 安装 php-rdkafka 扩展:
1
2
3
4
5
6
7
8
git clone https://github.com/arnaud-lb/php-rdkafka.git
cdphp-rdkafka
# 如果是 PHP7
# git checkout php7
phpize
./configure
makeall -j 5
sudomakeinstall


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

配置php.ini并重启php-fpm

PHP.ini中添加

extension=rdkafka.so
  • 1
  • 1

PHP消费

参考https://github.com/arnaud-lb/php-rdkafka

$rk = new RdKafka\Consumer();(在yii2中,使用绝对路径$rk = new \RdKafka\Producer();)
$rk->setLogLevel(LOG_DEBUG);
$rk->addBrokers("127.0.0.1");

$topic = $rk->newTopic("test");
$topic->consumeStart(0, RD_KAFKA_OFFSET_BEGINNING);

while (true) {
    // The first argument is the partition (again).
    // The second argument is the timeout.
    $msg = $topic->consume(0, 1000);
    if($msg==NULL){
        sleep(1);
    }
    else{
        echo '#'.$msg->payload."#\n";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

参考


参考文档:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章