• docker 安装kafka


    安装docker

    yum install -y docker

    启动docker

    systemctl start docker
    

    拉取镜像

    1. docker pull wurstmeister/zookeeper
    2. docker pull wurstmeister/kafka

    查看镜像

    docker images

    启动zookeeper容器

    docker run -d --name zookeeper --publish 2181:2181 --volume /etc/localtime:/etc/localtime wurstmeister/zookeeper

    启动kafka容器

    docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=宿主机的ip --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka

    进入kafka容器

    docker exec -it kafka bash

    创建一个kafka topic test1

    kafka-topics.sh --create --zookeeper 宿主机ip:2181 --replication-factor 1 --partitions 1 --topic test01

    创建一个kafka生产者

    kafka-console-producer.sh --broker-list localhost:9092 --topic test01

    创建一个kafka消费者

    kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test01 --from-beginning

    设置开机自启

    1. docker update zookeeper --restart=always
    2. docker update kafka --restart=always

     


    php使用kafka

    拉取php7.4

    docker pull php:7.4-fpm

     开启php容器

    1. docker run -p 9000:9000 -d --name php -v /www/docker:/www/docker --privileged=true php:7.4-fpm
    2. 解释:
    3. -p 9000:9000 :将容器的9000端口映射到主机的9000端口
    4. -d 后台运行(守护进程)
    5. --name php:将容器命名为php
    6. -v 将主机中当前目录下的www挂载到容器的www目录

    安装librdkafka

    1. 先退出,exit,然后在宿主机
    2. cd /www/docker/librdkafka && git clone https://github.com/edenhill/librdkafka.git
    3. 下载完后,进入php容器
    4. docker exec -it php bash
    5. cd /www/docker/librdkafka && ./configure
    6. make && make install

    安装php-rdkafka

    pecl install rdkafka

     开启扩展

    docker-php-ext-enable rdkafka

    php.ini配置文件写入 

    extension=rdkafka.so

     php.ini 文件位置:

    /usr/local/etc/php/

    docker里没有vi命令,先拷贝到宿主机修改,然后再拷贝回去

    1. #宿主机创建目录
    2. mkdir /www/docker/php
    3. #拷贝到宿主机
    4. docker cp php:/usr/local/etc/php/php.ini-development /www/docker/php
    5. docker cp php:/usr/local/etc/php/php.ini-production /www/docker/php
    6. #添加 extension=rdkafka.so 到php.ini文件
    7. echo 'extension=rdkafka.so'>>/www/docker/php/php.ini-development
    8. echo 'extension=rdkafka.so'>>/www/docker/php/php.ini-production
    9. #从宿主机拷贝回容器里
    10. docker cp /www/docker/php/php.ini-development php:/usr/local/etc/php/
    11. docker cp /www/docker/php/php.ini-production php:/usr/local/etc/php/

    命令解释:

    重启php

    docker restart php

    查看是否加载成功

    php -m

    php 使用kafka 

    宿主机、/www/docker  下运行

    composer require nmred/kafka-php

    增加producer.php 生产者,consumer.php消费者

    producer.php代码:

    1. require './vendor/autoload.php';
    2. date_default_timezone_set('PRC');
    3. $config = \Kafka\ProducerConfig::getInstance();
    4. $config->setMetadataRefreshIntervalMs(10000);
    5. $config->setMetadataBrokerList('localhost:9092');
    6. $config->setBrokerVersion('1.0.0');
    7. $config->setRequiredAck(1);
    8. $config->setIsAsyn(false);
    9. $config->setProduceInterval(500);
    10. $producer = new \Kafka\Producer();
    11. for($i = 0; $i < 1; $i++) {
    12. $result = $producer->send([
    13. [
    14. 'topic' => 'topicA',
    15. 'value' => 'topicA下面的第一条消息-消息1'.time(),
    16. 'key' => '',
    17. ],
    18. ]);
    19. var_dump($result);
    20. }

     consumer.php 代码:

    1. require './vendor/autoload.php';
    2. date_default_timezone_set('PRC');
    3. $config = \Kafka\ConsumerConfig::getInstance();
    4. $config->setMetadataRefreshIntervalMs(10000);
    5. $config->setMetadataBrokerList('localhost:9092');
    6. $config->setGroupId('test');
    7. $config->setBrokerVersion('1.0.0');
    8. $config->setTopics(array('topicA'));
    9. //$config->setOffsetReset('earliest');
    10. $consumer = new \Kafka\Consumer();
    11. $consumer->start(function ($topic, $part, $message) {
    12. var_dump($message);
    13. });

    先进入到容器,然后运行php文件

    1. #进入容器
    2. docker exex -it php bash
    3. #运行生产者
    4. php /www/dockerproducer.php
    5. #运行消费者
    6. php /www/dockerconsumer.php

    参考链接:

    https://blog.csdn.net/ertty34/article/details/122236022
    https://www.jianshu.com/p/3e1d2aeaffd8
    https://blog.csdn.net/qq_26683009/article/details/109289161

  • 相关阅读:
    重学Elasticsearch第2章 : ElasticSearch客户端操作索引、映射、文档
    C#调用Windows API实现自定义打印纸张大小
    支持向量机分类算法
    AD域 - 自动为域颁发证书
    .ttf 字体剔除
    自动驾驶技术
    图像相关知识(分辨率、帧率、数据格式、数据量以及像素时钟)
    西部学刊杂志西部学刊杂志社西部学刊编辑部2022年第14期目录
    【读博日记】拓扑结构(待修正)
    在线html编辑器 富文本转为html代码
  • 原文地址:https://blog.csdn.net/weixin_42592326/article/details/126075938