PHP使用Kafka

PHP使用Kafka 1.前言 中文文檔地址:https://kafka.apachecn.org/ 1.1定義 Apache Kafka® 是 一個分佈式流處理平臺 1.2基本原理 1.3名詞解釋 名詞 Broker Topic Partition Producer Consumer ConsumerGroup 2.安裝Java環境 # 下載jdk1.8 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html#license-lightbox # 解壓 tar -zxvf jdk-8u281-linux-x64.tar.gz # 配置環境變量 vim /etc/profile # 增加以下配置 JAVA_HOME=/usr/local/java/jdk1.8.0_281 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH # 重載 source /etc/profile 3.安裝Kafka # 下載源碼 https://www.apache.org/dyn/closer.cgi?path=/kafka/2.7.0/kafka_2.12-2.7.0.tgz # 解壓 tar -zxvf kafka_2.12-2.7.0.tgz #啓動 # 需先啓動zookeeper # -daemon 可啓動後臺守護模式 # 如果你已經啓動了zookeeper 就不用啓動下面這 (kafka默認提供有zookeeper) bin/zookeeper-server-start.sh config/zookeeper.properties # 啓動Kafka服務端 bin/kafka-server-start.sh config/server.properties # 啓動kafka客戶端測試 # 創建一個話題,test話題2個分區 bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic test Created topic "test". # 顯示所有話題 bin/kafka-topics.sh --list --zookeeper localhost:2181 test # 顯示話題信息 bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test Topic:test PartitionCount:2 ReplicationFactor:1 Configs: Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0 Topic: test Partition: 1 Leader: 0 Replicas: 0 Isr: 0 # 啓動一個生產者(輸入消息) bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test [等待輸入自己的內容 出現>輸入即可] >i am a new msg ! >i am a good msg ? # 啓動一個消費者(等待消息) # 注意這裏的--from-beginning,每次都會從頭開始讀取,你可以嘗試去掉和不去掉看下效果 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning [等待消息] i am a new msg ! i am a good msg ? 4.安裝RdKafka擴展 # 下載librdkafka git clone https://codechina.csdn.net/mirrors/edenhill/librdkafka.git # 編譯安裝 cd librdkafka/ ./configure make && make install # 下載RdKafka擴展 https://pecl.php.net/get/rdkafka-5.0.0.tgz tar -zxvf rdkafka-5.0.0.tgz cd rdkafka-5.0.0.tgz # 編譯安裝 /usr/local/php/bin/phpize ./configure --with-config=/usr/local/php/bin/php-config make && make install # php.ini 追加擴展,重啓php-fpm extension=rdkafka.so systemctl restart php-fpm # 驗證 php -m 5.使用Kafka 5.1生產(Producer) $config = new \RdKafka\Conf(); # 設置broker $config->set('metadata.broker.list', $this->brokerList); $producer = new \RdKafka\Producer($config); # 設置topic $topic = $producer->newTopic($topic); $topic->produce(RD_KAFKA_PARTITION_UA, 0, json_encode($message)); $producer->poll(0); $result = $producer->flush(10000); if (RD_KAFKA_RESP_ERR_NO_ERROR !== $result) { return false; } return true; 5.2消費(Consumer) $conf = new \RdKafka\Conf(); $conf->set('group.id', $this->groupName); $conf->set('metadata.broker.list', $this->brokerList); $conf->set('auto.offset.reset', 'earliest'); $consumer = new \RdKafka\KafkaConsumer($conf); $consumer->subscribe([$this->topicName]); while (true) { $message = $topic->consume(0, 120*10000); if ($message->err != RD_KAFKA_RESP_ERR_NO_ERROR) { print("err: " . $message->err); print("errstr: " . $message->errstr()); } else { var_dump($message->payload); } } 5.3項目中使用 # rocket-customer application/command/KafkaConsumerByCall.php application/command/KafkaConsumerByCustomer.php application/command/KafkaConsumerByMemberCall.php application/command/KafkaConsumerByProfile.php
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章