PHP로 Kafka 시운전

6763 단어 PHPKafka

전제 조건

  • Kafka
  • 부팅 가능

    컨디션

  • CentOS-6.7
  • kafka-0.9.0
  • PHP-5.6.19
  • PHP 클라이언트 라이브러리

    Kafka의 PHP 클라이언트 라이브러리를 찾으면 몇 개가 나오는데, 이번에 사용Kafka한 공식 홈페이지에 소개된 phpkafka.phpkafka의 구축이 필요하기 때문에php-rdkafka도 설치한다.
  • https://github.com/EVODelavega/phpkafka
  • https://github.com/edenhill/librdkafka
  • 설치하다.


    필요한 라이브러리 설치

    $ sudo yum groupinstall -y --enablerepo=remi "Development Tools"
    $ sudo yum install zlib zlib-devel openssl openssl-devel cyrus-sasl2 cyrus-sasl-devel
    

    php-rdkafka 설치

    $ git clone https://github.com/edenhill/librdkafka/
    $ cd librdkafka
    $ ./configure
    $ make 
    $ sudo make install
    

    phpkafka의 Extension 만들기

    $ git clone https://github.com/EVODelavega/phpkafka.git
    $ cd phpkafka
    $ phpize
    $ ./configure --enable-kafka
    $ sudo make install
    
    $ php -m | grep kafka
    kafka
    

    불러올 수 없을 때


    자신의 환경에서 다음 오류가 발생하여 프로그램 라이브러리를 잘 읽을 수 없기 때문에librdkafka.so가 설치된 경로를 설정해야 하기 때문에 다음과 같은 조작을 실행했습니다.
    $ php -m
    PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/kafka.so' - librdkafka.so.1: cannot open shared object file: No such file or directory in Unknown on line 0
    
    $ sudo touch /etc/ld.so.conf.d/librd.conf
    $ sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/librd.conf'
    $ ldconfig  <-- 設定を更新
    $ ldconfig -p  <-- 反映されたか確認する
    

    실제로 행동해 보세요.


    나는 카프카가 사전 제작test_topic이라는 화제를 가동시켜 메시지를 보내려고 한다.

    Producer


    메시지 보내기 스크립트
    <?php
    
    $kafka = new Kafka("localhost:9092");
    try {
        $kafka->produce("test_topic", "test_message");
    } catch (Exception $e) {
        echo $e->getMessage() . PHP_EOL;
    }
    
    $kafka->disconnect(Kafka::MODE_PRODUCER);
    

    Consumer


    메시지 수락 스크립트
    <?php
    
    $kafka = new Kafka("localhost:9092");
    $partitions = $kafka->getPartitionsForTopic('test_topic');
    $kafka->setPartition($partitions[0]);
    $offset = 1;
    $size = 1;
    
    while (1) {
        try {
            $messages = $kafka->consume("test_topic", $offset, $size);
            if (count($messages) > 0) {
                foreach ($messages as $message) {
                    echo $message . PHP_EOL;
                    $offset += 1;
                }
            }
        } catch (Exception $e) {
            echo $e->getMessage() . PHP_EOL;
            break;
        }
    }
    
    $kafka->disconnect();
    

    실행 결과



    감상


    이번에 사용한 PHP 클라이언트 라이브러리는 High Level API를 지원하지 않으며 ZooKeeper를 사용하는 방법도 모릅니다.
    다른 PHP Customer Library를 찾으면 이것저것 나오고, 밑에 있는 물건이면 High Level API에 대응해서 이번에 거기를 한번 해보고 싶어요.
    - https://github.com/arnaud-lb/php-rdkafka

    좋은 웹페이지 즐겨찾기