本博文介绍如何一步步搭建起Kafka本地环境。

下载Kafka 0.9.0.0 并配置软链接

  下载好后,放入电脑本地安装目录,mac下我放在/usr/local下,解压Kafka。

tar -xzf kafka_2.-0.9.0.0.tgz

  然后建立一个当前版本的kafka的软链接,这样在配置的时候系统环境配置的时候不需要写版本号,也有利于以后的版本更新。

ln -s kafka_2.-0.9.0.0 kafka

  接着cd kafka进入主目录。

启动Kafka Server

  在启动前,需要安装并配置Zookeeper,不过在kafka中带有一个单节点示例的Zookeeper实例脚本包,所以我们也可以先不安装配置Zookeeper,在启动Kafka Server前,我们先启动Zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties

  在Zookeeper成功启动以后,就可以启动Kafka Server了:

bin/kafka-server-start.sh config/server.properties

创建topic话题

  通过下面的脚本,我们创建了一个名为test的topic话题,该话题分区数为1,冗余份数为1。然后通过list展示当前话题,会列出test。  

bin/kafka-topics.sh --create --zookeeper localhost: --replication-factor  --partitions  --topic test
bin/kafka-topics.sh --list --zookeeper localhost:

启动生产者Producer和消费者Consumer

  通过以下脚本启动一个Producer,然后可以输入生产的消息:

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

this is a test of producer

  通过下面的命令启动消费者Consumer来消费,然后会打印出上述输入的消息:

bin/kafka-console-consumer.sh --zookeeper localhost: --topic test --from-beginning
this is a test of producer

  如果上述两个命令,在不同的终端启动,这时候你在生产者终端输入消息并回车,消费者端可以看到。

启动多broker的集群

  由于Kafka是分布式的消息系统,目前我们只是启动了一个Kafka Server,并看不到分布式的效果,下面在本地启动多个Kafka Server,首先我们需要将server的配置文件复制两份,因为每个Kafka服务启动都是依赖配置文件,在配置文件中设置了诸如服务启动端口等信息。

cp config/server.properties config/server-.properties
cp config/server.properties config/server-.properties

  修改上述复制出来的配置文件,由于默认服务启动在9092端口,所以后续两个server启动在9093和9094;然后默认的server的broker id为0,由于id是borker的唯一标识,所以后续的id依次为1和2.默认的几个属性如下:

broker.id=

############################# Socket Server Settings #############################

listeners=PLAINTEXT://:9092

# The port the socket server listens on
#port= # A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs

  server1和server2的关于这几个属性的配置修改如下:

broker.id=
listeners=PLAINTEXT://:9093
port=
log.dirs=/tmp/kafka-logs- broker.id=
listeners=PLAINTEXT://:9094
port=
log.dirs=/tmp/kafka-logs-

  然后依次启动两个broker的服务:

bin/kafka-server-start.sh config/server-.properties
bin/kafka-server-start.sh config/server-.properties

  最好在多个终端启动,分别看看效果。

  接着我们启动一个冗余数为3的topic并describe这个topic,效果显示如下:

bin/kafka-topics.sh --create --zookeeper localhost: --replication-factor  --partitions  --topic my-replication-topic
Created topic "my-replication-topic".
bin/kafka-topics.sh --describe --zookeeper localhost: --topic my-replication-topic
Topic:my-replication-topic PartitionCount: ReplicationFactor: Configs:
Topic: my-replication-topic Partition: Leader: Replicas: ,, Isr: ,,

  显示的内容一共是两行,第一行是对所有partition的总结,后续各行是每个partition的信息,由于我们这里只有一个partition,所以后续只有1行(也就是第二行)

  • Leader:表示负责该partition所有读写的节点
  • Replicas:所有拥有该partition 日志的备份数据的节点,不管这些节点是否是Leader或者活着。
  • Isr:是所有同步Replicas集合。 这是Replicas列表的子集合,在这个集合中的都是活着并且赶上Leader进度的。

多broker的容错性测试

  上面的my-replication-topic的Leader是0号服务,那我们尝试找到0号broker并将该进程杀死,脚本如下:

Lilis-MacBook-Pro:kafka_2.-0.9.0.0 lili$ ps | grep server.properties
ttys001 :28.51 /Library/Java/JavaVirtualMachines。。。
2686 ttys006 0:00.00 grep server.properties
Lilis-MacBook-Pro:kafka_2.10-0.9.0.0 lili$ kill -9 2366

  再describe my-replication-topic的时候,发现leader已经变了,此时变成了2号broker,而且同步Replicas集合中也少了0号broker。

Lilis-MacBook-Pro:kafka_2.-0.9.0.0 lili$ bin/kafka-topics.sh --describe --zookeeper localhost: --topic my-replication-topic
Topic:my-replication-topic PartitionCount: ReplicationFactor: Configs:
Topic: my-replication-topic Partition: Leader: Replicas: ,, Isr: ,
Lilis-MacBook-Pro:kafka_2.-0.9.0.0 lili$

  当然,再次启动消费者来消费消息,消息依然还是存在的。

bin/kafka-console-consumer.sh --zookeeper localhost: --from-beginning --topic my-replication-topic

【Kafka入门】搭建Kafka本地环境的更多相关文章

  1. Groovy轻松入门——搭建Groovy开发环境

    摘自: http://www.blogjava.net/BlueSUN/archive/2007/03/17/104391.html Groovy轻松入门--搭建Groovy开发环境 多日来,我发表了 ...

  2. kafka入门(2)- 环境部署

    部署Zookeeper(单机/集群) 1.下载安装文件: http://mirror.bit.edu.cn/apache/zookeeper/ 2.解压文件(本文解压到 D:\zookeeper-3. ...

  3. OSX10.12搭建IPv6本地环境测试APP

    前记 最近刚换了工作,生活终于又安定下来了,又可以更博了 正文 最近公司在上线APP(整体全是用JS去写的,就用了我原生的一个控制器),然后APP就去上线,就被苹果巴巴给拒了.通过阅读苹果回复的邮件, ...

  4. Flink从入门到放弃(入门篇2)-本地环境搭建&构建第一个Flink应用

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...

  5. 【Kafka入门】Kafka基础结构和知识

    基本概念的总结 在基本的Kafka架构中,producer将消息发布到Kafka话题中,一个Kafka话题通常指消息的类别或者名称,Kafka话题被集群中一个充当Kafka server角色的 bro ...

  6. 【Kafka入门】Kafka入门第一篇:基础概念篇

    Kafka简介 Kafka是一个消息系统服务框架,它以提交日志的形式存储消息,并且消息的存储是分布式的,为了提供并行性和容错保障,消息的存储是分区冗余形式存在的. Kafka的架构 Kafka中包含以 ...

  7. Linux入门搭建可视化桌面环境小合集virtual box centOS7.10

    常用命令: 关联主机与虚拟机(方便文件共享): # sudo mount -t vboxsf share(主机文件夹名) /usr/share(虚拟机内自创) Linux shell进入root模式: ...

  8. maven 项目搭建,本地环境配置。

    一,下载地址 http://maven.apache.org/download.cgi 英文不好的,可以在浏览器下载个翻译的插件,就好了,我用的是谷歌. 二, 解压文件,安装在自己制定的目录,注意安装 ...

  9. RAP开发入门-搭建RAP开发环境(一)

    ps:补充 RAP (Remote Application Platform) 官网地址eclipse.org/rap 1.下载IDE http://www.eclipse.org/downloads ...

  10. spark本地环境的搭建到运行第一个spark程序

    搭建spark本地环境 搭建Java环境 (1)到官网下载JDK 官网链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

随机推荐

  1. 在smarty模板中嵌入php代码

    我个人并不太喜欢smarty的语法,写起来比较啰嗦易出现匹配出错,但是旧项目中有许多工程都是采用它作模板.最近需要在此上稍微加一些PHP的内容,但我不想在模板控制层去一个一个assign,而想在模板文 ...

  2. ural 1123

    找大于等于原数的最小回文数字  代码比较烂........... #include <iostream> #include <cstdio> #include <cstr ...

  3. docker 通过commit方法创建镜像(Tomcat+Java+Scala)

    前一阵试了试写Dockerfile创建docker image,但有时全靠Dockerfile写实在有些难度,退而求其次试一试使用commit来创建镜像: 想了想干脆创建一个Java+Scala+To ...

  4. 推荐牛X的一本JS书

    主要是看阮一峰的教程时,他参考书目里有这一本中文的, 找来一看,果然高.. 练习一下. function Base(name) { this.name = name; this.getName = f ...

  5. 安装Hadoop系列 — 安装JDK-8u5

    安装步骤如下: 1)下载 JDK 8 从http://www.oracle.com/technetwork/java/javasebusiness/downloads/ 选择下载JDK的最新版本 JD ...

  6. Java的类演进过程

    1.从面向过程到面向对象 在大家最熟悉的C语言中,如果要定义一个复杂的数据类型就用结构体(Struct)来实现,而为结构体的每个操作都定义一个函数,这个函数与结构体本身的定义没有任何关系.程序的重心集 ...

  7. jquery ui autoComplete自动完成

    官网:http://jqueryui.com/autocomplete 最简单的形式: var availableTags = [ "ActionScript", "Ap ...

  8. mysql 闪回表工具

    use HTTP::Date qw(time2iso str2time time2iso time2isoz); use POSIX; my $SDATE = strftime("%Y-%m ...

  9. Android 启动过程总结

    SystemServer的启动 frameworks/base/services/java/com/android/server/SystemServer.java: run() 其中调用Activi ...

  10. Webform——内嵌word编辑器

    word编辑器,类似于Word的. 首先需要添加两个引用: 然后把一个文件夹仍在根目录下: 继而在工具箱里 选择项→浏览找到这两个引用,直接把工具拽进来就行: 获取编辑器文本: protected v ...