本文主要介绍如何在单节点上安装 Kafka 并测试 broker、producer 和 consumer 功能。

下载

进入下载页面:http://kafka.apache.org/downloads.html ,选择 Binary downloads下载 (Source download需要编译才能使用),这里我下载 kafka_2.11-0.8.2.1,其对应的 Scala 版本为 2.11

  1. $ wget http://apache.fayea.com/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz

解压并进入目录:

  1. $ tar -xzvf kafka_2.11-0.8.2.1.tgz
  2. $ cd kafka_2.11-0.8.2.1

查看目录结构:

  1. tree -L 2
  2. .
  3. ├── bin
  4.    ├── kafka-console-consumer.sh
  5.    ├── kafka-console-producer.sh
  6.    ├── kafka-consumer-offset-checker.sh
  7.    ├── kafka-consumer-perf-test.sh
  8.    ├── kafka-mirror-maker.sh
  9.    ├── kafka-preferred-replica-election.sh
  10.    ├── kafka-producer-perf-test.sh
  11.    ├── kafka-reassign-partitions.sh
  12.    ├── kafka-replay-log-producer.sh
  13.    ├── kafka-replica-verification.sh
  14.    ├── kafka-run-class.sh
  15.    ├── kafka-server-start.sh
  16.    ├── kafka-server-stop.sh
  17.    ├── kafka-simple-consumer-shell.sh
  18.    ├── kafka-topics.sh
  19.    ├── windows
  20.    ├── zookeeper-server-start.sh
  21.    ├── zookeeper-server-stop.sh
  22.    └── zookeeper-shell.sh
  23. ├── config
  24.    ├── consumer.properties
  25.    ├── log4j.properties
  26.    ├── producer.properties
  27.    ├── server.properties
  28.    ├── test-log4j.properties
  29.    ├── tools-log4j.properties
  30.    └── zookeeper.properties
  31. ├── libs
  32.    ├── jopt-simple-3.2.jar
  33.    ├── kafka_2.11-0.8.2.1.jar
  34.    ├── kafka_2.11-0.8.2.1-javadoc.jar
  35.    ├── kafka_2.11-0.8.2.1-scaladoc.jar
  36.    ├── kafka_2.11-0.8.2.1-sources.jar
  37.    ├── kafka_2.11-0.8.2.1-test.jar
  38.    ├── kafka-clients-0.8.2.1.jar
  39.    ├── log4j-1.2.16.jar
  40.    ├── lz4-1.2.0.jar
  41.    ├── metrics-core-2.2.0.jar
  42.    ├── scala-library-2.11.5.jar
  43.    ├── scala-parser-combinators_2.11-1.0.2.jar
  44.    ├── scala-xml_2.11-1.0.2.jar
  45.    ├── slf4j-api-1.7.6.jar
  46.    ├── slf4j-log4j12-1.6.1.jar
  47.    ├── snappy-java-1.1.1.6.jar
  48.    ├── zkclient-0.3.jar
  49.    └── zookeeper-3.4.6.jar
  50. ├── LICENSE
  51. └── NOTICE
  52. 4 directories, 45 files

启动和停止

运行 kafka ,需要依赖 zookeeper,你可以使用已有的 zookeeper 集群或者利用 kafka 提供的脚本启动一个 zookeeper 实例:

  1. $ bin/zookeeper-server-start.sh config/zookeeper.properties &

默认的,zookeeper 会监听在 *:2181/tcp

停止刚才启动的 zookeeper 实例:

  1. $ bin/zookeeper-server-stop.sh

启动Kafka server:

  1. $ bin/kafka-server-start.sh config/server.properties &

config/server.properties 中有一些默认的配置参数,这里仅仅列出参数,不做解释:

  1. broker.id=0
  2. port=9092
  3. #host.name=localhost
  4. #advertised.host.name=<hostname routable by clients>
  5. #advertised.port=<port accessible by clients>
  6. num.network.threads=3
  7. num.io.threads=8
  8. socket.send.buffer.bytes=102400
  9. socket.receive.buffer.bytes=102400
  10. socket.request.max.bytes=104857600
  11. log.dirs=/tmp/kafka-logs
  12. num.partitions=1
  13. num.recovery.threads.per.data.dir=1
  14. #log.flush.interval.messages=10000
  15. #log.flush.interval.ms=1000
  16. log.retention.hours=168
  17. #log.retention.bytes=1073741824
  18. log.segment.bytes=1073741824
  19. log.retention.check.interval.ms=300000
  20. log.cleaner.enable=false
  21. zookeeper.connect=localhost:2181
  22. zookeeper.connection.timeout.ms=6000

如果你像我一样是在虚拟机中测试 kafka,那么你需要修改 kafka 启动参数中 JVM 内存大小。查看 kafka-server-start.sh 脚本,修改 KAFKA_HEAP_OPTS 处 -Xmx 和 -Xms 的值。

启动成功之后,会看到如下日志:

  1. [2015-03-17 11:19:30,528] INFO Starting log flusher with a default period of 9223372036854775807 ms. (kafka.log.LogManager)
  2. [2015-03-17 11:19:30,604] INFO Awaiting socket connections on 0.0.0.0:9092. (kafka.network.Acceptor)
  3. [2015-03-17 11:19:30,605] INFO [Socket Server on Broker 0], Started (kafka.network.SocketServer)
  4. [2015-03-17 11:19:30,687] INFO Will not load MX4J, mx4j-tools.jar is not in the classpath (kafka.utils.Mx4jLoader$)
  5. [2015-03-17 11:19:30,756] INFO 0 successfully elected as leader (kafka.server.ZookeeperLeaderElector)
  6. [2015-03-17 11:19:30,887] INFO Registered broker 0 at path /brokers/ids/0 with address cdh1:9092. (kafka.utils.ZkUtils$)
  7. [2015-03-17 11:19:30,928] INFO [Kafka Server 0], started (kafka.server.KafkaServer)
  8. [2015-03-17 11:19:31,048] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)

从日志可以看到:

  • log flusher 有一个默认的周期值
  • kafka server 监听在9092端口
  • 在 cdh1:9092 上注册了一个 broker 0 ,路径为 /brokers/ids/0

停止 Kafka server :

  1. $ bin/kafka-server-stop.sh

单 broker 测试

在启动 kafka-server 之后启动,运行producer:

  1. $ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

在另一个终端运行 consumer:

  1. $ bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

在 producer 端输入字符串并回车,查看 consumer 端是否显示。

多 broker 测试

配置和启动 Kafka broker

接下来参考 Running a Multi-Broker Apache Kafka 0.8 Cluster on a Single Node 这篇文章,基于 config/server.properties 配置文件创建多个 broker 的 kafka 集群。

创建第一个 broker:

  1. $ cp config/server.properties config/server1.properties

编写 config/server1.properties 并修改下面配置:

  1. broker.id=1
  2. port=9092
  3. log.dir=/tmp/kafka-logs-1

创建第二个 broker:

  1. $ cp config/server.properties config/server2.properties

编写 config/server2.properties 并修改下面配置:

  1. broker.id=2
  2. port=9093
  3. log.dir=/tmp/kafka-logs-2

创建第三个 broker:

  1. $ cp config/server.properties config/server3.properties

编写 config/server3.properties 并修改下面配置:

  1. broker.id=3
  2. port=9094
  3. log.dir=/tmp/kafka-logs-3

接下来分别启动这三个 broker:

  1. $ JMX_PORT=9999 ; nohup bin/kafka-server-start.sh config/server1.properties &
  2. $ JMX_PORT=10000 ; nohup bin/kafka-server-start.sh config/server2.properties &
  3. $ JMX_PORT=10001 ; nohup bin/kafka-server-start.sh config/server3.properties &

下面是三个 broker 监听的网络接口和端口列表:

  1. Broker 1 Broker 2 Broker 3
  2. ----------------------------------------------
  3. Kafka *:9092/tcp *:9093/tcp *:9094/tcp
  4. JMX *:9999/tcp *:10000/tcp *:10001/tcp

创建 Kafka topic

在 Kafka 0.8 中有两种方式创建一个新的 topic:

  • 在 broker 上开启 auto.create.topics.enable 参数,当 broker 接收到一个新的 topic 上的消息时候,会通过 num.partitions 和 default.replication.factor 两个参数自动创建 topic。
  • 使用 bin/kafka-topics.sh 命令

创建一个名称为 zerg.hydra 的 topic:

  1. $ bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic zerg.hydra --partitions 3 --replication-factor 2

使用下面查看创建的 topic:

  1. $ bin/kafka-topics.sh --zookeeper localhost:2181 --list
  2. test
  3. zerg.hydra

还可以查看更详细的信息:

  1. $ bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic zerg.hydra
  2. Topic:zerg.hydra PartitionCount:3 ReplicationFactor:2 Configs:
  3. Topic: zerg.hydra Partition: 0 Leader: 2 Replicas: 2,3 Isr: 2,3
  4. Topic: zerg.hydra Partition: 1 Leader: 3 Replicas: 3,0 Isr: 3,0
  5. Topic: zerg.hydra Partition: 2 Leader: 0 Replicas: 0,2 Isr: 0,2

默认的,Kafka 持久化 topic 到 log.dir 参数定义的目录。

  1. $ tree /tmp/kafka-logs-{1,2,3}
  2. /tmp/kafka-logs-1 # first broker (broker.id = 1)
  3. ├── zerg.hydra-0 # replica of partition 0 of topic "zerg.hydra" (this broker is leader)
  4. ├── 00000000000000000000.index
  5. └── 00000000000000000000.log
  6. ├── zerg.hydra-2 # replica of partition 2 of topic "zerg.hydra"
  7. ├── 00000000000000000000.index
  8. └── 00000000000000000000.log
  9. └── replication-offset-checkpoint
  10. /tmp/kafka-logs-2 # second broker (broker.id = 2)
  11. ├── zerg.hydra-0 # replica of partition 0 of topic "zerg.hydra"
  12. ├── 00000000000000000000.index
  13. └── 00000000000000000000.log
  14. ├── zerg.hydra-1 # replica of partition 1 of topic "zerg.hydra" (this broker is leader)
  15. ├── 00000000000000000000.index
  16. └── 00000000000000000000.log
  17. └── replication-offset-checkpoint
  18. /tmp/kafka-logs-3 # third broker (broker.id = 3)
  19. ├── zerg.hydra-1 # replica of partition 1 of topic "zerg.hydra"
  20. ├── 00000000000000000000.index
  21. └── 00000000000000000000.log
  22. ├── zerg.hydra-2 # replica of partition 2 of topic "zerg.hydra" (this broker is leader)
  23. ├── 00000000000000000000.index
  24. └── 00000000000000000000.log
  25. └── replication-offset-checkpoint
  26. 6 directories, 15 files

启动一个 producer

以 sync 模式启动一个 producer:

  1. $ bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --sync --topic zerg.hydra

然后,输入以下内容:

  1. Hello, world!
  2. Rock: Nerf Paper. Scissors is fine.

启动一个 consumer

在另一个终端运行:

  1. $ bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic zerg.hydra --from-beginning

注意,生产环境通常不会添加 --from-beginning 参数。

观察输出,你会看到下面内容:

  1. Hello, world!
  2. Rock: Nerf Paper. Scissors is fine.

把 consumer 停掉再启动,你还会看到相同的输出结果。

将日志推送到 kafka

例如,将 apache 或者 nginx 或者 tomcat 等产生的日志 push 到 kafka,只需要执行下面代码即可:

  1. $ tail -n 0 -f /var/log/nginx/access.log | bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --sync --topic zerg.hydra

安装和测试Kafka的更多相关文章

  1. 安装和测试Kafka(转)

    http://blog.javachen.com/2015/03/17/install-and-test-kafka/# 本文主要介绍如何在单节点上安装 Kafka 并测试 broker.produc ...

  2. kafka 安装以及测试

    1,下载kafka 并进行解压 http://mirrors.cnnic.cn/apache/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz 2,启动Zookeeper  ...

  3. windows安装zookeeper和kafka,flume

    一.安装JDK 过程比较简单,这里不做说明. 最后打开cmd输入如下内容,表示安装成功 二.安装zooeleeper 下载安装包:http://zookeeper.apache.org/release ...

  4. 在Centos 7上安装配置 Apche Kafka 分布式消息系统集群

    Apache Kafka是一种颇受欢迎的分布式消息代理系统,旨在有效地处理大量的实时数据.Kafka集群不仅具有高度可扩展性和容错性,而且与其他消息代理(如ActiveMQ和RabbitMQ)相比,还 ...

  5. my SQL下载安装,环境配置,以及密码忘记的解决,以及navicat for mysql下载,安装,测试连接

    一.下载 在百度上搜索"mysql-5.6.24-winx64下载" 二.安装 选择安装路径,我的路径“C:\Soft\mysql-5.6.24-winx64” 三.环境配置 计算 ...

  6. Windows OS上安装运行Apache Kafka教程

    Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...

  7. OpenCV2+入门系列(一):OpenCV2.4.9的安装与测试

    这里假设看到这篇文章的人都已经对OpenCV以及机器视觉等最基础的概念有了一定的认识,因此本文不会对OpenCV做任何的介绍,而是直接介绍OpenCV2.4.9的安装与测试.此外本文只是简单的介绍如何 ...

  8. 决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试

    决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试 [TOC] Apache ZooKeeper 单机模式安装 创建hadoop用户&赋予sudo权限, ...

  9. hadoop 之 kafka 安装与 flume -> kafka 整合

    62-kafka 安装 : flume 整合 kafka 一.kafka 安装 1.下载 http://kafka.apache.org/downloads.html 2. 解压 tar -zxvf ...

随机推荐

  1. 【Web开发】一、页面布局

    一.Frame <frameset id="topFrameSet" rows="69,*" border="0" framespac ...

  2. Python取时间,日期的总结

    import datetime from datetime import timedelta now = datetime.datetime.now() #今天 today = now #昨天 yes ...

  3. Jmeter创建web测试计划

    创建web测试计划 在这一章,我们将学习如何创建基本的测试计划来测试一个web网站.您将创建五个用户并发送请求到JMeter网站的两个页面.同时,设置用户运行测试两次.因此,请求的总数是(5个用户)x ...

  4. java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩

    现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...

  5. Django的学习基础1

    著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. Django的MTV模式本质上与MVC模式没有什么差别,也是 ...

  6. spring整合springmvc和mybatis

    1.spring 1.1 jar包 1.2 spring基本配置,包扫描注解 <!-- 自动扫描 --> <context:component-scan base-package=& ...

  7. js校验数字是否为小数

    js校验数字是否为小数: function checkDot(c) {c = parseFloat(c); -]?[-]*\.[-]*[-]+$/; return r.test(c); }

  8. 十二 Cent OS下 tomcat启动项目响应速度很慢

    在tomcat部署了web项目,每次启动项目都需要花费2-3分钟,甚至有的时候需要花费10分钟左右,实在是太慢了. 在网上查找解决方案,把 jdk/jre/lib/security/java.secu ...

  9. Linux中的叹号命令

    在shell环境下操作,需要积累点快捷输入的小技巧: 最常用的技巧恐怕就是Tab自动补全以及上方向键来回退上几条历史命令了,这些对于csh,bash,ksh,zsh都适用. 最近还找到一种快速回退上一 ...

  10. linux 添加开机自启动脚本

    原文 Linux设置服务开机自动启动的方式有好多种,这里介绍一下通过chkconfig命令添加脚本为开机自动启动的方法. 1. 编写脚本autostart.sh(这里以开机启动redis服务为例),脚 ...