首页 > 代码库 > Apache Kafka系列(一)

Apache Kafka系列(一)

摘要:

  1.Apache Kafka基本概念

  2.Kafka的安装

  3.基本工具创建Topic

 本文基于centos7, Apache Kafka 0.11.0

一、基本概念

  Apache Kafka是一个发布/订阅的消息系统,于2009年源自Linkedin,并与2011年开源。在架构方面,Kafka类似于其他的消息系统(ActiveMQ,RabbitMQ)。但是Kafka有诸多的特性使得越来越流行:

  • Kafka本身支持分布式,很容易横向扩展
  • 高吞吐量,高性能
  • 高容错性,即使宕机

  Kafka在实时数据处理方面的应用场景越来越多

二、安装

  1.安装jdk

[root@eb2c2d938924 /]# yum install java-1.8.0-openjdk.x86_64

     2.下载kafka_2.12-0.11.0.0.tgz到/tmp下

[root@eb2c2d938924 /]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.11.0.0/kafka_2.12-0.11.0.0.tgz  -P /tmp

       3.解压压缩文件到/opt目录下

[root@eb2c2d938924 /]# tar -xvzf /tmp/kafka_2.12-0.11.0.0.tgz -C /opt/

       4.解压后的目录结构如下

[root@eb2c2d938924 kafka_2.12-0.11.0.0]# pwd
/opt/kafka_2.12-0.11.0.0
[root@eb2c2d938924 kafka_2.12-0.11.0.0]# ls
LICENSE  NOTICE  bin  config  libs  site-docs
[root@eb2c2d938924 kafka_2.12-0.11.0.0]# 
  • bin:包含Kafka运行的所有脚本,如:start/stop Zookeeper,start/stop Kafka
  • libs:Kafka运行的依赖库
  • config:zookeeper,Logger,Kafka等相关配置文件
  • sit-docs:Kafka相关文档

三、启动Kafka服务器

  Kafka能够以3种方式部署集群

  • 单节点-单Broker集群:只在一个节点上部署一个Broker
  • 单节点-多Broker集群:在一个节点上部署多个Broker,只不过各个Broker以不同的端口启动
  • 多节点-多Broker集群:以上两种的组合,每个节点上部署一到多个Broker,且各个节点连接起来

  本次仅以第一种方式部署。启动Kafka需要两步:

  • 启动ZooKeeper

    Kafka使用ZooKeeper来存储集群元数据和Consumer信息。因此,有两种选项:

    第一,独立部署ZooKeeper应用并配置Kafka集群到该ZooKeeper;

    第二,使用Kafka自带的ZooKeeper

    本文选择使用Kafka自带的ZooKeeper

  •  启动Kafka服务

    3.1 启动ZooKeeper

[root@eb2c2d938924 kafka_2.12-0.11.0.0]# bin/zookeeper-server-start.sh config/zookeeper.properties 
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
[2017-08-10 14:02:29,426] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...
[2017-08-10 14:02:29,491] INFO minSessionTimeout set to -1 (org.apache.zookeeper.server.ZooKeeperServer) [2017-08-10 14:02:29,491] INFO maxSessionTimeout set to -1 (org.apache.zookeeper.server.ZooKeeperServer) [2017-08-10 14:02:29,501] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)

    ZooKeeper成功启动,并绑定到端口2181。该端口是ZooKeeper的默认端口,可以通过编辑文件config/zookeeper.properties 中的clientPort来修改监听端口。

  3.2 启动Kafka Broker

[root@eb2c2d938924 kafka_2.12-0.11.0.0]# bin/kafka-server-start.sh config/server.properties 
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
[2017-08-10 14:11:58,741] INFO KafkaConfig values: 
 .....
[2017-08-10 14:12:00,385] INFO Kafka version : 0.11.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2017-08-10 14:12:00,385] INFO Kafka commitId : cb8625948210849f (org.apache.kafka.common.utils.AppInfoParser)
[2017-08-10 14:12:00,386] INFO [Kafka Server 0], started (kafka.server.KafkaServer)

 

四、使用Kafka

  4.1 创建一个Topic 名称为HelloWorld

[root@eb2c2d938924 kafka_2.12-0.11.0.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 > --partitions 1 --topic HelloWorld

     校验Topic是否创建成功

[root@Server1 kafka_2.12-0.11.0.0]# bin/kafka-topics.sh --list --zookeeper localhost:2181
HelloWorld

     4.2 启动一个Producer并发送消息

   可以使用Kafka命令行客户端(获取标准命令行输入并一Message形式发出)发送消息到Kafka集群。默认情况下,每行会单独算作一次消息发出。下例通过该命令行终端发送消息到HelloWorld这个Topic,命令如下:

[root@Server1 kafka_2.12-0.11.0.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic HelloWorld
>hello world!
>this is the first greating
>

     4.3 启动一个Consumer并接受消息

      跟4.2中类似,同样可以使用Kafka命令行终端来启动一个Consumer(格式化消息到标准输出),命令如下

[root@Server1 kafka_2.12-0.11.0.0]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topicelloWorld --from-beginning
hello world!
this is the first greating

  

五、结论

  本文展示了如何一步一步安装Kafka到Linux,涵盖如何下载,启动ZooKeeper/Kafka,发送和接受来自Kafka服务器的消息

 

 

 

Apache Kafka系列(一)