docker 安装kafka

5 篇文章 0 订阅
2 篇文章 0 订阅

安装docker

yum install -y docker

启动docker

systemctl start docker

拉取镜像

docker pull wurstmeister/zookeeper
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

设置开机自启

docker update zookeeper --restart=always
docker update kafka --restart=always


php使用kafka

拉取php7.4

docker pull php:7.4-fpm

 开启php容器

docker run -p 9000:9000 -d --name php -v /www/docker:/www/docker --privileged=true php:7.4-fpm 

 解释:
-p 9000:9000 :将容器的9000端口映射到主机的9000端口 
-d 后台运行(守护进程) 
--name php:将容器命名为php 
-v 将主机中当前目录下的www挂载到容器的www目录

安装librdkafka

先退出,exit,然后在宿主机
cd /www/docker && git clone https://github.com/edenhill/librdkafka.git

下载完后,进入php容器
docker exec -it php bash

cd /www/docker/librdkafka && ./configure
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命令,先拷贝到宿主机修改,然后再拷贝回去

#宿主机创建目录
mkdir /www/docker/php

#拷贝到宿主机
docker cp php:/usr/local/etc/php/php.ini-development /www/docker/php
docker cp php:/usr/local/etc/php/php.ini-production /www/docker/php

#添加 extension=rdkafka.so 到php.ini文件
echo 'extension=rdkafka.so'>>/www/docker/php/php.ini-development 
echo 'extension=rdkafka.so'>>/www/docker/php/php.ini-production

#从宿主机拷贝回容器里
docker cp /www/docker/php/php.ini-development php:/usr/local/etc/php/
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代码:

<?php
require './vendor/autoload.php';
date_default_timezone_set('PRC');

$config = \Kafka\ProducerConfig::getInstance();
$config->setMetadataRefreshIntervalMs(10000);
$config->setMetadataBrokerList('localhost:9092');
$config->setBrokerVersion('1.0.0');
$config->setRequiredAck(1);
$config->setIsAsyn(false);
$config->setProduceInterval(500);
$producer = new \Kafka\Producer();


for($i = 0; $i < 1; $i++) {
    $result = $producer->send([
        [
            'topic' => 'topicA',
            'value' => 'topicA下面的第一条消息-消息1'.time(),
            'key' => '',
        ],
    ]);
    var_dump($result);
}

 consumer.php 代码:

<?php

require './vendor/autoload.php';
date_default_timezone_set('PRC');



$config = \Kafka\ConsumerConfig::getInstance();
$config->setMetadataRefreshIntervalMs(10000);
$config->setMetadataBrokerList('localhost:9092');
$config->setGroupId('test');
$config->setBrokerVersion('1.0.0');
$config->setTopics(array('topicA'));
//$config->setOffsetReset('earliest');
$consumer = new \Kafka\Consumer();

$consumer->start(function ($topic, $part, $message) {
    var_dump($message);
});

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

#进入容器
docker exex -it php bash
#运行生产者
php /www/dockerproducer.php
#运行消费者
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

php安装mysql扩展,进入容器,安装扩展

docker-php-ext-install pdo pdo_mysql

【docker】php容器安装pdo_mysql扩展_drnrrwfs的博客-CSDN博客_docker php 安装pdo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值