本博文介绍如何一步步搭建起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. 团体程序设计天梯赛-练习集L1-001. Hello World

    L1-001. Hello World 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 这道超级简单的题目没有任何输入. 你只需要在一行中输 ...

  2. WCF服务的创建和发布到IIS

    一. WCF服务的创建 有两种创建方式: 1.WCF服务库 2.WCF服务应用程序 如下图所示: 这里选择WCF服务库.注意事项: 1.WCF服务库是一个类库项目,这里选择.net 3.5版本(版本高 ...

  3. codeforces #309 div1 B

    题目啰里啰嗦说了一大堆(耐心读完题目就可以秒题了) 首先我们考虑当前置换的开头的循环节的开头 1.如果是1 1->1形成循环节 问题变成i-1的子问题 2.如果是2 1->2->1形 ...

  4. PLS-00103: 出现符号 ...

    Oracle存储过程: create or replace procedure update_people(in_name ), in_status in nvarchar2) as begin up ...

  5. CentOS7 64位 自动分配IP地址设置

    vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 # ifcfg-后接网卡名称 配置如下,ONBOOT设置为yes HWADDR=:0C::E9 ...

  6. SVN使用方法总结

    SVN使用方法   SVN版本管理模式:http://www.cnblogs.com/newstar/archive/2011/01/04/svn.html (集中式-trunk和分散式-branch ...

  7. 转:Build Your First JavaScript Library

    http://net.tutsplus.com/tutorials/javascript-ajax/build-your-first-javascript-library/ Step 1: Creat ...

  8. 退出myeclipse 8.5配置中心

    用myeclipse 8.5没多久,进入软件中心下载插件,找不到退出按钮,唉,木想到就是一图标.

  9. Mac修改用户名

    Mac 修改用户是一件很悲剧的事,因为牵涉到很多地方的修改,当然,如果只是需要满足登陆用户名的修改的话,就比较简单.而如果需要将某个用户在每一个地方显示的名字都改掉的话,就要修改不是地方了,下面就来讲 ...

  10. poj 1924 Paths on a Grid(组合数学)

    题目:http://poj.org/problem?id=1942 题意:给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有 ...