官方网站:http://kafka.apache.org/

一、概述

1.简介

kafka是一个款分布式发布和订阅系统,主要用于大数据的数据流处理和作为消息中间件的使用,相比其他消息中间件他的特点是高性能高吞吐量,因为他并没有完全遵循AMQP(高级消息队列协议)。

2.应用场景

行为跟踪:kafka可以用于用于跟中用户浏览页面、搜索以及其他操作行为,通过发布订阅及时记录 到响应的topic中,通过后端大数据平台接入处理分析、实时处理以及监控。

日志收集:在实际开发中,我们应用程序的日志会输出到本地磁盘,排查问题需要通过linux操作,如果应用程序组成了负载均衡集群,并且集成的机器较多,那么想通过linux命令来操作就很麻烦,所以一般会做一个日志统一收集平台管理日志用来快速排查问题,这也叫做日志聚合,即从不同服务器收集日志放到一个统一的平台进行处理。所以大部分公司的套路是把应用日志集中到kafka然后分别导入到es和hdfs上,用来实时分析和离线统计数据备份等。而另一方面kafka本身也提供了很好的api来做日志收集。

异步处理:作为一个消息中间件的基本功能,可实现业务系统的解耦异步处理。

3.基本架构

一个典型kafka集群包括若干个producer(消息生产者),若干个broker(kafka集群包含多个服务器,每个服务器是一个broker),若干个comsumer(消息消费者),以及一个zookeeper集群。

kafka通过zookeeper管理集群配置以即服务协同,producer通过push模式将消息发布到broker,consumer通过监听使用pull模式从broker订阅并消费消息。

多个broker协同工作,producer和consumer部署在各个业务逻辑中。三者通过zookeeper管理协调请
求和转发。这样就组成了一个高性能的分布式消息发布和订阅系统。

国产化KAFKA中间件_zookeeper

4.名词解释
  1. broker
    kafka集群包含一个或多个服务器,这种服务器被称作broker,broker端不维持数据的消费状态,提升了性能。直接使用磁盘进行存储:避免了数据在jvm内存和系统内存之间的复制,减少了耗性能的创建对象和垃圾回收,线性读写,速度快。
  2. producer
    消息生产者,负责发布消息到kafka broker,push模式。
  3. consumer
    消息消费者,负责从kafka broker订阅消息,pull模式。
  4. topic
    每条发布到kafka的消息都一个一个类别,这个类别被称作topic。物理上不同topic的消息被分开存储,逻辑上一个topic的消息虽然被保存在一个或多个不同的broker,但用户只需要指定topic即可生产和消费而不需要关心消息被存在于哪个broker上。
  5. partition
    分区是物理上的概念,每个topic包含一个或多个分区。
  6. consumer group
    每个consumer需要指定一个groupId,相同的groupId是一个消费组,消息是被消费组中任意一个consumer消费,这个消费组其他consumer就不会再消费这个消息。

二、安装

下载地址:http://kafka.apache.org/downloads

1.解压
tar -zxvf kafka_2.11-2.0.0.tgz
2.启动zookeeper
因为kafka依赖于zookeeper来做master选举一起其他数据的维护,所以需要先启动zookeeper节点kafka内置了zookeeper的服务,所以在bin目录下提供了这些脚本
sh zookeeper-server-start.sh -daemon ../config/zookeeper.properties
3.启动kafka
sh kafka-server-start.sh -daemon ../config/server.properties
4.停止kafka
sh kafka-server-stop.sh -daemon ../config/server.properties
5.kafka命令基本操作
  1. 查看topic
    sh kafka-topics.sh --list --zookeeper localhost:2181
  2. 查看topic属性
    sh kafka-topics.sh --describe --zookeeper localhost:2181 --topic [topic_name]
  3. 消费消息
    sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic [topic_name] --from-beginning
  4. 发布消息
    sh kafka-console-producer.sh --broker-list localhost:9092 --topic [topic_name]
6.集群配置

1)修改不同机器的server.properties文件的节点信息id和互相通信的协议地址

broker1

broker.id=0
listeners=PLAINTEXT://本机ip:9092

broker2

broker.id=1
listeners=PLAINTEXT://本机ip:9092

broker3

broker.id=2
listeners=PLAINTEXT://本机ip:9092

2)修改每个机器的zookeeper.properties文件

zookeeper.connect=zookeeper_ip:2181
  1. 分别启动三台kafka服务
sh kafka-server-start.sh -daemon ../config/server.properties

三、window安装启动

1.下载解压

同linux系统一样下载tar.gz包,下载后可以安装7z解压工具完成解压

2.启动zookeeper

进入到kafka目录执行命令

.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
3.启动kafka
.\bin\windows\kafka-server-start.bat .\config\server.properties
以上步骤即可在windows环境开始对kafka的体验

注意:

如果启动kafka时遇到dos提示无法加载启动类可进行后续操作然后重新启动,在kafka安装目录中找到bin\windows目录中的kafka-run-class.bat

替换行

set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*

set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*

并确保java环境和CLASSPATH正常

CLASSPATH        .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;