• 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
  • 相关阅读:
    I2C调试
    linux读取cpu温度
    看react全家桶+adtd有感
    react学习1(搭建脚手架,配置less,按需引入antd等)
    去掉console.log,正式环境不能有console.log
    Vue的minix
    数组去重我总结的最常用的方法,其他不常用就不写了
    inline-block bug解决方法
    vue中使用less/scss(这是2.0 3.0就不需要手动配置了只需要安装依赖就行了)
    Vue 调用微信扫一扫功能
  • 原文地址:https://www.cnblogs.com/yanweifeng/p/15878470.html
Copyright © 2020-2023  润新知