kafka1 -kafka简单介绍

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

一 基础概念:

producer:消息生产者、
consumer:消息消费者、
topic:一个队列、
consumer group:消费者组
broker:一台kafka机器,一个broker可以容纳多个topic
partition:每个topic包含多个partition
offset:偏移量
leader主、follower从。所有的读写操作都在leader,leader挂了自动选择follwer成为leader

二 环境搭建:

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

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值