kafka的安装和使用

kafka安装使用(windows下实践)

安装jdk

JAVA_HOME E:\Java\jdk1.8.0_152

PATH %JAVA_HOME%\bin,%JAVA_HOME%\jre\bin

安装zookeeper

https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

解压后,重命名conf/zoo_sample.cfg为zoo.cfg,并编辑

修改dataDir=/tmp/zookeeper 为 dataDir=E:/zookeeper/data

运行zookeeper

bin/zkServer.cmd

安装kafka

https://archive.apache.org/dist/kafka/2.3.0/kafka_2.12-2.3.0.tgz

2.8版本后不需要单独下载zookeeper了

修改config/server.properties文件中log.dirs=/tmp/kafka-logs 为 log.dirs=E:/kafka/kafka-logs

运行kafka

.\bin\windows\kafka-server-start.bat .\config\server.properties

使用kafka

  • 创建topic

    kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

  • 创建producer

    kafka-console-producer.bat --broker-list localhost:9092 --topic test

  • 创建consumer

    kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test

  • 列出主题

    kafka-topics.bat --list --zookeeper localhost:2181

  • 描述主题

    kafka-topics.bat --describe --zookeeper localhost:2181 --topic [Topic Name]

  • 从头读取消息

    kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic [Topic Name] --from-beginning

  • 删除主题

    kafka-run-class.bat kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181

安装kafka-tool

Offset Explorer

安装后填写连接信息,连接后查看topic

修改数据格式

laravel使用kafka

安装composer包

composer require nmred/kafka-php

发现无法安装需要修改psr/log包版本,composer require psr/log 1.0.2

  • 创建kafka消费者 php artisan make:command KafkaConsumer

  • 创建kafka生产者 php artisan make:command KafkaProducer

    //消费者
    $config = ConsumerConfig::getInstance();
    $config->setMetadataRefreshIntervalMs(10000);
    $config->setMetadataBrokerList('127.0.0.1:9092');
    $config->setGroupId('test');
    $config->setBrokerVersion('1.0.0');
    $config->setTopics(['test']);
      
    $consumer = new Consumer();
    $consumer->start(function($topic, $part, $message) {
    $this->info(json_encode($message));
    });
      
    //生产者
    $config = ProducerConfig::getInstance();
    $config->setMetadataRefreshIntervalMs(10000);
    $config->setMetadataBrokerList('127.0.0.1:9092');
    $config->setBrokerVersion('1.0.0');
    $config->setRequiredAck(1);
    $config->setIsAsyn(false);
    $config->setProduceInterval(500);
    $producer = new Producer();
    for($i = 0; $i < 5; $i++) {
        $producer->send([
            [
                'topic' => 'test',
                'value' => 'test....message.' . $i,
                'key' => '' . $i,
            ],
        ]);
    }

踩坑记录

  • 在kafka-tool中删掉topic后发现kafka挂掉了

    删掉zoo.cfg中配置的data目录下的文件,重启zookeeper和kafka即可

注意点

  • kafka的broker是每台kafka服务器的唯一标识

  • 根据服务器的吞吐量来设置partition分区,分区越多,并行传输的数据越多,但是资源不充足的情况下会导致传输速度更慢,12核cpu每个topic可以设置12分区,分区越多需要的内存空间也越多

  • 越多的分区需要打开更多的文件句柄,每个分区对应文件系统一个目录

  • 每个partition都会有多个副本存在于其他broker中,如果其中一个broker故障时,需要重新选举leader,这时要从zookeeper读取和修改受影响的partition元数据,还要从其他broker中移走相应的partition,意味着更多的partition需要更多的时间来恢复

  • kafka默认是发布订阅模式,即一个消息可以被多个消费者消费

常见错误

[2022-05-31 14:38:46,406] INFO Reading configuration from: E:\kafka\config\server.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig) [2022-05-31 14:38:46,409] ERROR Invalid config, exiting abnormally (org.apache.zookeeper.server.quorum.QuorumPeerMain) org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing E:\kafka\config\server.properties at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:156) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:104) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81) Caused by: java.lang.NumberFormatException: For input string: "initial.rebalance.delay.ms" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Long.parseLong(Long.java:589) at java.lang.Long.parseLong(Long.java:631) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:244) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152) ... 2 more

解决:在kafka安装目录下启动

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

end for time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值