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

參考


參考文檔:

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