kafka1 -kafka簡單介紹

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);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章