消息队列-kafka

简介

Kafka是一个分布式消息队列

特点

  • kafka是分布式的,其所有组件都可以是分布式的
  • 消息生产时可以对消息进行区分(归类),可以进行分区,并且可以持续添加
  • kafka每秒可以产生25万消息(50MB),每秒处理55万消息(110MB)
  • 消息被处理的状态是在consumer端维护,而不是由server端维护,当失败时,能自动平衡

组成

  • Topic(主题):用于区分不同类别信息的类别名称;由producer制定
  • Producer(生产者):将消息发布到kafka特定的Topic的对象(过程)
  • Consumer(消费者):订阅并处理特定的Topic中的消息的对象(过程)
  • Broker(kafka服务集群):已发布的消息保存在一组服务器中,称之为Kafka集群;集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息。
  • Partition(分区):Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)
  • Message(消息):通信的最基本的单位,每个producer可以向一个topic发布一些消息。

kafka环境搭建

tip:以下为docker环境下的安装
注意:kafka环境基于zookeeper,zookeeper环境基于java-jdk
docker环境安装自行百度

下载镜像

zookeeper镜像:docker pull wurstmeister/zookeeper
kafka镜像:docker pull wurstmeister/kafka

运行容器

  • zookeeper容器:
docker run -d --name zookeeper -p 2181:2181 镜像名/镜像id
  • kafka容器:
docker run -d --name kafka -p 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=127.0.0.1 --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka:latest

验证服务是否可用

  • 进入容器:docker exec -it kafka bash

  • 进入kafka服务目录:cd /opt/kafka_+版本号/bin/

  • 运行生产者发送消息:./kafka-console-producer.sh --broker-list localhost:9092 --topic sun

  • 编写消息内容:> {"datas":[{"channel":"","metric":"temperature","producer":"mytest","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}

  • 在另一个shell进入容器,进入kafka服务目录,运行kafka消费者接受消息:./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning

  • 当接收到编写的消息证明kafka服务可用

你可能感兴趣的:(消息队列-kafka)