kafka简单介绍

痞子三分冷 提交于 2020-08-19 20:55:22

Kafka是一种分布式消息队列,为何要使用消息队列?是基于异步通信的诉求,为了服务之间相互解耦,同时避免在高并发时完成流量削峰的作用。

一 基础概念:

producer:消息生产者、
consumer:消息消费者、
topic:一个队列、
consumer group:消费者组
broker:一台kafka机器,一个broker可以容纳多个topic
partition:每个topic包含多个partition

二 环境搭建:

1 首先需要java环境,下载安装jdk
2 下载kafka安装包,kafka_2.11-2.4.1.tgz。解压缩。
3 修改config/server.properties文件:
#broker 的全局唯一编号,不能重复
broker.id=0
#删除 topic 功能使能
delete.topic.enable=true
#kafka服务监听端口
listeners=PLAINTEXT://localhost:9092
#kafka 运行日志存放的路径
log.dirs=/opt/module/kafka/logs
#配置连接 Zookeeper 集群地址
zookeeper.connect=localhost:2181

三 常见命令:

zookeeper服务启动:/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties&
Kafka服务启动:/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
Kafka服务关闭:/usr/local/kafka/bin/kafka-server-stop.sh stop
1)查看topic列表cd /usr/local/kafka/ && bin/kafka-topics.sh --zookeeper localhost:2181 --list
2) 创建 topic cd /usr/local/kafka/ && bin/kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor 1 --partitions 1 --topic first
3) 删除topic cd /usr/local/kafka/ && bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic __consumer_offsets
4)发送消息 cd /usr/local/kafka/ && bin/kafka-console-producer.sh --broker-list localhost:9092 --topic first
5)消费消息 cd /usr/local/kafka/ && bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first
6)查看topic cd /usr/local/kafka/ && bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic first
7) 确认是否存在要使用的主题 cd /usr/local/kafka/ && bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

四 php API

1 生产者:
public function actionKafkaProduce()
    {
        $config = \Kafka\lib\ProducerConfig::getInstance();
        $config->setMetadataRefreshIntervalMs(10000);
        $config->setMetadataBrokerList('localhost:9092');
        $producer = new \Kafka\Producer();
        while (!feof(STDIN)) {
            $line = fread(STDIN, 1024);
            $producer->send([
                [
                    'topic' => "first",
                    'key' => 1,
                    'value' => json_encode([
                        'biz' => 'store_job',
                        'action' => $line,
                    ]),
                ]
            ]);
        }
    }
2 消费者:
public function actionKafkaConsume()
    {
        $config = \Kafka\lib\ConsumerConfig::getInstance();
        $config->setMetadataRefreshIntervalMs(10000);
        $config->setMetadataBrokerList('localhost:9092');
        $config->setGroupId('test');
        $config->setBrokerVersion('1.0.0');
        $config->setTopics(['first']);
        $config->setOffsetReset('earliest');
        $consumer = new \Kafka\Consumer();
        $consumer->start([$this, "kafkaConsume"]);
    }

public function kafkaConsume($topic, $part, $message_orig)
    {
        $message = json_decode($message_orig['message']['value'],1);
        var_dump($message);
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!