以前队列都用的其他的,没用过 kafka,听说延迟和吞吐都不错,测试一下,后面说不定能用上。

直接运行

wget https://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
tar -zxvf kafka_*.tgz

启动 zookeeper

bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

后台运行。logs 文件夹可看到输出。

启动 kafka

bin/kafka-server-start.sh -daemon config/server.properties

后台运行。logs 文件夹可看到输出。

停止

bin/zookeeper-server-stop.sh
bin/kafka-server-stop.sh

docker 运行

可以直接拉镜像运行,这里在网上找了一个 compose 的配置

docker-compose.yml

version: "3"
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    depends_on: [zookeeper]
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_CREATE_TOPICS: "test"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

打包

docker-compose build

启动, 添加 -d 可以后台启动。

sudo docker-compose up

自带工具测试

创建 topic

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
bin/kafka-topics.sh --list --bootstrap-server localhost:9092

测试产生消息

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

测试消费消息

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

据说 --bootstrap-server 是新方法,不像以前要访问 zk。

查看描述 topics 信息

bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test

kafkacat 测试

sudo apt install kafkacat

基本信息

kafkacat -L -b localhost:9092

生产消费

kafkacat -P -b localhost:9092 -t test
kafkacat -C -b localhost:9092 -t test

C++ 测试

貌似 apt 能找到对应的开发库。

sudo apt install librdkafka-dev 

有 c 和 c++ 的 api,不过不好用。。

测试会自动重连。
每次都会得到消息。。需要 group id 相同?
分区什么的也搞不懂,以后用上了再说吧。