Kafka入门

概念

  • Broker 中间人 单独一个Kafka节点是一个Broker,Kafka集群由多个Broker组成
  • Topic 主题 一个主题由一个或多个消息构成
  • Producer 生产者 向Broker发送消息
  • Consumer 消费者 从Broker拉取消息消费
  • ConsumerGroup 消费组 由一类有相似行为的消费者构成,同一个消息只能被消费组中的一个消费者消费
  • Partition 分区,实际存储消息的地方,每个Topic都由一个或多个Partition构成

架构

用Doker部署一个Kafka集群

  1. 拉取Zookeeper 镜像
docker pull wurstmeister/zookeeper
  1. 拉取Kafka 镜像
docker pull wurstmeister/kafka
  1. 运行Zookeeper 容器
docker run -d --name zookeeperct -p 2181:2181  wurstmeister/zookeeper
// -d 后台运行  --name指定名字为zookeeperct -p用宿主机的2181端口映射容器2181 
  1. 运行Kafka容器
docker run -d --name kafkact -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.17.0.1:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.17.0.1:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092   wurstmeister/kafka
// -e 设置环境变量
//-e KAFKA_BROKER_ID=0  配置BROKER_ID,集群中唯一
//-e KAFKA_ZOOKEEPER_CONNECT=172.17.0.1:2181//kafka 配置ZOOKEEPER IP,用docker inspect zookeeperct 命令查看
//-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT//172.17.0.1:9092  //把kafka的地址端口注册给zookeeper
//-e KAFKA_LISTENERS=PLAINTEXT//0.0.0.0:9092 配置kafka的监听端口
  • 如果启动失败,查看容器日志
docker logs -f -t --tail 50 kafkact
  1. 测试发送和接收消息
//进入容器
docker exec -it kafka bash

//运行生产者脚本
/opt/kafka_2.12-2.5.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic furit
> apple
> origin

//运行消费者脚本
/opt/kafka_2.12-2.5.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic furit

运行流程

  1. 生产者定期向主题发送消息。

  2. Kafka broker将所有消息存储在为该特定主题配置的分区中。它确保消息在分区之间平等共享。如果生产者发送两个消息,并且有两个分区,则Kafka将在第一个分区中存储一个消息,在第二个分区中存储第二个消息。

  3. 消费者订阅一个特定的主题。

  4. 一旦消费者订阅了一个主题,Kafka将向消费者提供该主题的当前偏移量,并将偏移量保存在ZooKeeper中。

  5. 消费者将定期请求Kafka新消息。

  6. 一旦Kafka收到来自生产者的消息,它会将这些消息转发给消费者。

  7. 消费者将收到消息并处理它。

  8. 一旦消息被处理,消费者将向Kafka broker发送确认。

  9. 一旦Kafka收到确认,它会将偏移量更改为新值,并在ZooKeeper中进行更新。由于ZooKeeper中保留了偏移量,因此即使在服务器出现故障时,消费者也可以正确读取下一条消息。

posted @ 2020-07-10 00:08  defmain  阅读(147)  评论(0编辑  收藏  举报