kafka学习(一) ---- 基本概念以及环境搭建

原创
2016/08/11 18:06
阅读数 3.8K

kafka学习(一) ---- 基本概念以及环境搭建

前言

由于项目涉及到kafka,自己以前没有接触过这方面的,学习了下,将搭建kafka运行环境同大家分享(单机搭建的Windows下的运行环境,Linux下的由于懒得装虚拟机就没有搭建,以后有时间在分享一次,搭建这个环境就是只为了学习)。

1、基本概念

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.//官方解释

Kafka是一种高吞吐量的分布式发布订阅消息系统,它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。 整体运行机制如下图:

图来源于官网

更多内容请参看:官方文档,这里就不一一翻译了。

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、环境搭建

2.1 下载

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

2.2 单机搭建win下的运行环境

官网没有win版本的,下载之后直接按照Linux下解压缩一样,解压之后文件结构如下:

2.2.1 配置kafka####

  1. 进入Kafka配置目录:S:\devTools\kafka_2.11-0.10.0.0\config
  2. 编辑文件“server.properties” 主要配置日志所在目录(也可以使用默认的)
  3. 找到并编辑“log.dirs=/tmp/kafka-logs” to “log.dirs= S:/devTools/kafka_2.11-0.10.0.0/kafka-logs”
  4. 如果Zookeeper在某些其他的机器或集群上运行,可以将“zookeeper.connect:2181”修改为自定义IP与端口。在这个演示中我们使用了同一个机器,因此没必要做修改。文件中的Kafka端口和broker.id也是可以配置的。其他设置不变。
  5. Kafka会按照默认在9092端口上运行,并连接zookeeper的默认端口:2181。

2.2.2 运行kafka

重要:请确保在启动Kafka服务器前,Zookeeper实例已经准备好并开始运行。

Zookeeper如何安装运行请参看我的博客:Dubbo与Zookeeper、SpringMVC整合和使用中有关Zookeeper的介绍。

kafka在win下的启动命令都在bin目录下的Windows文件下,如下图:

不知道是不是win脚本问题,直接运行这些命令都是失败的启动不了kafka,没有办法还是cmd启动吧。

  1. 进入Kafka安装目录S:\devTools\kafka_2.11-0.10.0.0\
  2. 按下Shift+右键,选择“打开命令窗口”选项,打开命令行。
  3. 现在输入.\bin\windows\kafka-server-start.bat .\config\server.properties 并回车。
  4. 如果一切正常,命令行应当是这样:
  5. 现在Kafka已经准备好并开始运行,可以创建主题来存储消息了。我们也能从Java/Scala代码中,或直接从命令行中生成或使用数据。

2.2.3 创建主题

  1. 现在创建主题,命名为“demo”,replication factor=1(因为只有1个Kafka服务器在运行)。如果集群中所运行的Kafka服务器不止1个,可以相应增加replication-factor,从而提高数据可用性和系统容错性。
  2. 在S:\devTools\kafka_2.11-0.10.0.0\bin\windows打开新的命令行。
  3. 输入下面的命令,回车:

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo

结果如下:

2.2.4 创建生产者

  1. 在S:\devTools\kafka_2.11-0.10.0.0\bin\windows打开新的命令行。
  2. 输入下面的命令,回车:

kafka-console-producer.bat --broker-list localhost:9092 --topic demo

2.2.5 创建消费者

  1. 在S:\devTools\kafka_2.11-0.10.0.0\bin\windows打开新的命令行。
  2. 输入下面的命令,回车:

kafka-console-consumer.bat --zookeeper localhost:2181 --topic demo

2.2.6 演示

执行以上的命令之后有两个窗口:一个生产者,一个消费者。

在producer命令行中任意输入内容,回车;在其他consumer命令行中能看到相应消息。如果能够将消息推送到consumer端并显示出来的话,Kafka安装就完成了。

最后上个成功的截图:

2.3 常用的命令

  1. 列出主题:kafka-topics.bat --list --zookeeper localhost:2181
  2. 描述主题:kafka-topics.bat --describe --zookeeper localhost:2181 --topic [Topic Name]
  3. 从头读取消息:kafka-console-consumer.bat --zookeeper localhost:2181 --topic [Topic Name] --from -beginning
  4. 删除主题:kafka-run-class.bat kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181
  5. 演示一个删除的:

展开阅读全文
打赏
3
15 收藏
分享
加载中
火龙战士博主

引用来自“大烈阳”的评论

伟山,很棒,感觉大部分都是依赖于zk的订阅机制
是的,依赖zk
2016/08/12 10:15
回复
举报
伟山,很棒,感觉大部分都是依赖于zk的订阅机制
2016/08/12 10:12
回复
举报
更多评论
打赏
2 评论
15 收藏
3
分享
返回顶部
顶部