一、特性
 - 高吞吐、低延迟  
 
 - 高伸缩性  
 
 - 持久性、可靠性  
 
 - 容错性  
 
 - 高并发 
 
 通过 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 
      # 取消注释,改成本机IP:listeners=PLAINTEXT://192.168.43.10:9092# num.partitions后面增加2行。# 发送到不存在topic自动创建。允许永久删除topic。num.partitions=1auto.create.topics.enable=truedelete.topic.enable=true - 后台启动 kafka(kafka 安装目录下):  
  nohup ./bin/kafka-server-start.sh ./config/server.properties & 
 6. 创建 Topic
- 创建一个名为 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:21817. 启动 Producer
 - 打开一个窗口,在 kafka 解压目录下:
sh bin/kafka-console-producer.sh --broker-list localhost:9092 --topic gptest
 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. 修改配置文件
 - 修改配置文件 
      cd configcp 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 个服务
   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
 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
 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 回车。  
  - 在消费者窗口查看消息。