一、概述
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管理协调请
求和转发。这样就组成了一个高性能的分布式消息发布和订阅系统。
4.名词解释
- broker
kafka集群包含一个或多个服务器,这种服务器被称作broker,broker端不维持数据的消费状态,提升了性能。直接使用磁盘进行存储:避免了数据在jvm内存和系统内存之间的复制,减少了耗性能的创建对象和垃圾回收,线性读写,速度快。- producer
消息生产者,负责发布消息到kafka broker,push模式。- consumer
消息消费者,负责从kafka broker订阅消息,pull模式。- topic
每条发布到kafka的消息都一个一个类别,这个类别被称作topic。物理上不同topic的消息被分开存储,逻辑上一个topic的消息虽然被保存在一个或多个不同的broker,但用户只需要指定topic即可生产和消费而不需要关心消息被存在于哪个broker上。- partition
分区是物理上的概念,每个topic包含一个或多个分区。- consumer group
每个consumer需要指定一个groupId,相同的groupId是一个消费组,消息是被消费组中任意一个consumer消费,这个消费组其他consumer就不会再消费这个消息。
二、安装
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命令基本操作
- 查看topic
sh kafka-topics.sh --list --zookeeper localhost:2181- 查看topic属性
sh kafka-topics.sh --describe --zookeeper localhost:2181 --topic [topic_name]- 消费消息
sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic [topic_name] --from-beginning- 发布消息
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
- 分别启动三台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;