第十七章 Kafka

一、特性

  • 高吞吐、低延迟
  • 高伸缩性
  • 持久性、可靠性
  • 容错性
  • 高并发
    通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。
    高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百万的消息。
    支持通过 Kafka 服务器和消费机集群来分区消息。
    支持 Hadoop 并行数据加载。

二、场景

  • 消息传递
  • 网站活动跟踪
  • 指标监控
  • 日志聚合

三、安装

3.1 单机版

官网地址:https://kafka.apache.org/downloads

1. 进入 /usr/local/soft 目录;

cd /usr/local/soft

2. 下载 kafka;

wget https://archive.apache.org/dist/kafka/2.5.0/kafka_2.13-2.5.0.tgz

3. 解压

tar -xzvf kafka_2.13-3.2.1.tgz

4. 启动 zookeeper;
  • 后台启动 ZK:
    bin/zookeeper-server-start.sh -daemon config/zookeeper.properties &
  • 检查 zookeeper 是否启动成功:
    ps -ef|grep zookeeper
5. 启动 kafka;
  • 修改相关配置
    vim config/server.properties
java 复制代码
     # 取消注释,改成本机IP:
     listeners=PLAINTEXT://192.168.43.10:9092
     # num.partitions后面增加2行。
     # 发送到不存在topic自动创建。允许永久删除topic。
     num.partitions=1
     auto.create.topics.enable=true
     delete.topic.enable=true
  • 后台启动 kafka(kafka 安装目录下):
    nohup ./bin/kafka-server-start.sh ./config/server.properties &
6. 创建 Topic
java 复制代码
- 创建一个名为 gptest 的 topic ,只有一个副本,一个分区:
sh bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic gptest

- 查看已经创建的 topic:
sh bin/kafka-topics.sh -list -zookeeper localhost:2181
7. 启动 Producer
  • 打开一个窗口,在 kafka 解压目录下:
    sh bin/kafka-console-producer.sh --broker-list localhost:9092 --topic gptest
8. 启动 Consumer
  • 在一个新的远程窗口中:
    sh bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic gptest --from-beginning
9. Producer 窗口发送消息
  • 输入 hello world 回车
  • 消费者收到了消息:
3.2 伪集群
1. 进入 /usr/local/soft 目录;

cd /usr/local/soft

2. 下载 kafka;

wget https://archive.apache.org/dist/kafka/2.5.0/kafka_2.13-2.5.0.tgz

3. 解压

tar -xzvf kafka_2.13-3.2.1.tgz

4. 启动 zookeeper;
  • 后台启动 ZK:
    bin/zookeeper-server-start.sh -daemon config/zookeeper.properties &
  • 检查 zookeeper 是否启动成功:
    ps -ef|grep zookeeper
5. 修改配置文件
  • 修改配置文件
java 复制代码
     cd config
     cp server.properties server1.properties 
     cp server.properties server2.properties 
     cp server.properties server3.properties 
  • 修改配置文件中的 broker.id 分别为 1、2、3
    listeners 这一行取消注释,端口号分别为 9093、9094、9095
    log.dirs 分别设置为`kafka-logs1、kafka-logs2、kafka-logs3(先创建)
    mkdir -p /tmp/kafka-logs1 /tmp/kafka-logs2 /tmp/kafka-logs3
  • server1.properties 的配置:
    broker.id=1
    listeners=PLAINTEXT://192.168.44.161:9093
    log.dirs=/tmp/kafka-logs1
  • server2.properties 的配置:
    broker.id=2
    listeners=PLAINTEXT://192.168.44.161:9094
    log.dirs=/tmp/kafka-logs2
  • server3.properties 的配置:
    broker.id=3
    listeners=PLAINTEXT://192.168.44.161:9095
    log.dirs=/tmp/kafka-logs3
6. 启动 3 个服务
java 复制代码
   cd ../bin
   ./kafka-server-start.sh -daemon ../config/server1.properties
   ./kafka-server-start.sh -daemon ../config/server2.properties
   ./kafka-server-start.sh -daemon ../config/server3.properties

PS:如果遇到 zk node exists 的问题,先把 brokers 节点删掉(临时解决方案)。

7. 集群下创建 Topic
  • 在 bin 目录下,创建一个名为 `gptest` 的 `topic` ,只有一个副本,一个分区:
    sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic gptest
  • 查看已经创建的 topic:
    sh kafka-topics.sh -list -zookeeper localhost:2181
8. 集群下启动 Consumer
  • 在一个新的远程窗口中:
    sh kafka-console-consumer.sh --bootstrap-server 192.168.44.161:9093,192.168.44.161:9094,192.168.44.161:9095 --topic gptest --from-beginning
9. 集群下启动 Producer
  • 打开一个新的窗口,在 kafka 解压目录下:
    sh kafka-console-producer.sh --broker-list 192.168.44.161:9093,192.168.44.161:9094,192.168.44.161:9095 --topic gptest
10. 集群下 Producer 窗口发送消息
  • 在生产者窗口输入 hello world 回车。
  • 在消费者窗口查看消息。
相关推荐
古城小栈3 小时前
.proto文件:跨语言通信 的 协议基石
分布式·微服务
song5016 小时前
鸿蒙 Flutter 日志系统:分级日志与鸿蒙 Hilog 集成
图像处理·人工智能·分布式·flutter·华为
Wang's Blog6 小时前
RabbitMQ:消息可靠性保障之消费端 ACK 机制与限流策略解析
分布式·rabbitmq
松☆6 小时前
深入实战:Flutter + OpenHarmony 分布式软总线通信完整实现指南
分布式·flutter
武子康6 小时前
Java-194 RabbitMQ 分布式通信怎么选:SOA/Dubbo、微服务 OpenFeign、同步重试与 MQ 异步可靠性落地
大数据·分布式·微服务·消息队列·rabbitmq·dubbo·异步
song5016 小时前
鸿蒙 Flutter 插件测试:多版本兼容性自动化测试
人工智能·分布式·flutter·华为·开源鸿蒙
韩凡6 小时前
JAVA微服务与分布式(概念版)
java·分布式·微服务
电气铺二表姐137744166156 小时前
从并网到离网,尽在掌握:分布式储能微网智能监控与能量管理系统
运维·分布式·物联网·能源
L、2187 小时前
Flutter + OpenHarmony 分布式能力融合:实现跨设备 UI 共享与协同控制(终极篇)
javascript·分布式·flutter·ui·智能手机·harmonyos
梦里不知身是客118 小时前
一个集群的zk节点挂掉之后影响kafka的运行吗
分布式·kafka