kafka学习(一) ---- 基本概念以及环境搭建
前言
因为项目涉及到kafka,本身之前没有接触过这方面的,学习了下,将搭建kafka运行环境同你们分享(单机搭建的Windows下的运行环境,Linux下的因为懒得装虚拟机就没有搭建,之后有时间在分享一次,搭建这个环境就是只为了学习)。html
一、基本概念
1.1 什么是kafka
Apache Kafka is publish-subscribe messaging rethought as a distributed commit log。Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.//官方解释apache
Kafka是一种高吞吐量的分布式发布订阅消息系统,它提供了相似于JMS的特性,可是在设计实现上彻底不一样,此外它并非JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每一个实例(server)成为broker。不管是kafka集群,仍是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。 总体运行机制以下图:windows

图来源于官网服务器
更多内容请参看:官方文档,这里就不一一翻译了。数据结构
1.2 kafka的特色
- 经过I/O的磁盘数据结构提供消息的持久化,这种结构对于即便数以TB的消息存储也可以保持长时间的稳定性能。
- 高吞吐量:即便是很是普通的硬件Kafka也能够支持每秒数百万的消息。
- 支持经过Kafka服务器和消费机集群来分区消息。
- 支持Hadoop并行数据加载
1.3 涉及的术语
- Broker Kafka集群包含一个或多个服务器,这种服务器被称为broker
- Topic 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不一样Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic便可生产或消费数据而没必要关心数据存于何处)
- Partition Partition是物理上的概念,每一个Topic包含一个或多个Partition.
- Producer 负责发布消息到Kafka broker
- Consumer 消息消费者,向Kafka broker读取消息的客户端。
- Consumer Group 每一个Consumer属于一个特定的Consumer Group(可为每一个Consumer指定group name,若不指定group name则属于默认的group)
二、环境搭建
2.1 下载
下载地址:http://kafka.apache.org/downloads.html分布式

2.2 单机搭建win下的运行环境
官网没有win版本的,下载以后直接按照Linux下解压缩同样,解压以后文件结构以下:ide

2.2.1 配置kafka####
- 进入Kafka配置目录:S:\devTools\kafka_2.11-0.10.0.0\config
- 编辑文件“server.properties” 主要配置日志所在目录(也可使用默认的)
- 找到并编辑“log.dirs=/tmp/kafka-logs” to “log.dirs= S:/devTools/kafka_2.11-0.10.0.0/kafka-logs”
- 若是Zookeeper在某些其余的机器或集群上运行,能够将“zookeeper.connect:2181”修改成自定义IP与端口。在这个演示中咱们使用了同一个机器,所以不必作修改。文件中的Kafka端口和broker.id也是能够配置的。其余设置不变。
- Kafka会按照默认在9092端口上运行,并链接zookeeper的默认端口:2181。
2.2.2 运行kafka
重要:请确保在启动Kafka服务器前,Zookeeper实例已经准备好并开始运行。oop
Zookeeper如何安装运行请参看个人博客:Dubbo与Zookeeper、SpringMVC整合和使用中有关Zookeeper的介绍。性能
kafka在win下的启动命令都在bin目录下的Windows文件下,以下图:
学习
不知道是否是win脚本问题,直接运行这些命令都是失败的启动不了kafka,没有办法仍是cmd启动吧。
- 进入Kafka安装目录S:\devTools\kafka_2.11-0.10.0.0\
- 按下Shift+右键,选择“打开命令窗口”选项,打开命令行。

- 如今输入.\bin\windows\kafka-server-start.bat .\config\server.properties 并回车。

- 若是一切正常,命令行应当是这样:

- 如今Kafka已经准备好并开始运行,能够建立主题来存储消息了。咱们也能从Java/Scala代码中,或直接从命令行中生成或使用数据。
2.2.3 建立主题
- 如今建立主题,命名为“demo”,replication factor=1(由于只有1个Kafka服务器在运行)。若是集群中所运行的Kafka服务器不止1个,能够相应增长replication-factor,从而提升数据可用性和系统容错性。
- 在S:\devTools\kafka_2.11-0.10.0.0\bin\windows打开新的命令行。
- 输入下面的命令,回车:
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo
结果以下:

2.2.4 建立生产者
- 在S:\devTools\kafka_2.11-0.10.0.0\bin\windows打开新的命令行。
- 输入下面的命令,回车:
kafka-console-producer.bat --broker-list localhost:9092 --topic demo
2.2.5 建立消费者
- 在S:\devTools\kafka_2.11-0.10.0.0\bin\windows打开新的命令行。
- 输入下面的命令,回车:
kafka-console-consumer.bat --zookeeper localhost:2181 --topic demo
2.2.6 演示
执行以上的命令以后有两个窗口:一个生产者,一个消费者。 
在producer命令行中任意输入内容,回车;在其余consumer命令行中能看到相应消息。若是可以将消息推送到consumer端并显示出来的话,Kafka安装就完成了。
最后上个成功的截图:

2.3 经常使用的命令
- 列出主题:kafka-topics.bat --list --zookeeper localhost:2181
- 描述主题:kafka-topics.bat --describe --zookeeper localhost:2181 --topic [Topic Name]
- 从头读取消息:kafka-console-consumer.bat --zookeeper localhost:2181 --topic [Topic Name] --from -beginning
- 删除主题:kafka-run-class.bat kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181
- 演示一个删除的:
