在开始Kafka环境搭建之前,首先要安装Linux系统,并在Linux系统上安装JDK1.8版本,关于linux虚拟机的安装和linux系统下jdk的安装可以参考我的博文:

http://blog.csdn.net/yulei_qq/article/details/52132536       linux 虚拟机安装

http://blog.csdn.net/yulei_qq/article/details/51925673       jdk安装

安装好虚拟机和jdk之后,开始Kafka环境的搭建学习

一、下载Kafka安装文件.

可以从Apache官网下载最新版本的Kafka安装文件,我下载的0.10.0.0版本

下载完成之后,将压塑文件解压到 /usr/local目录下

[root@yulei ~]# tar -zxvf kafka_2.11-0.10.0.0.tgz -C /usr/local

可以看到/usr/local目录下有我们解压后的Kafka目录文件

二、启动服务

1、启动Zookeeeper服务

Kafka使用了Zookeeper,所以首先如果没有启动Zookeeper服务的话,要启动一个Zookeeper服务。可以使用如下的脚本快速的启动一个单实例的Zookeeper服务.

[root@yulei kafka_2.11-0.10.0.0]# bin/zookeeper-server-start.sh config/zookeeper.properties

2、启动Kafka服务

启动完成zookeeper服务之后,就可以启动Kafka Server了,可以用如下的脚本启动.

[root@yulei kafka_2.11-0.10.0.0]#  bin/kafka-server-start.sh config/server.properties

但是,我启动失败了,报如下错误:

原因是/etc/hosts 文件没有指定当前主机名和ip的对关系,设置下就好了:

[root@yulei kafka_2.11-0.10.0.0]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.142.131 yulei

当然,你也可以更改config/server.properties  中关于主机名的配置修改成你当前虚拟机的IP地址,可以通过ifconfig查看IP地址.

三、创建Topic

我们来创建一个名称为"test" 的topic ,它只有一个分区,只有一个副本. 
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
我们可以运行topic 下的list 命令来查看创建的topic
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --list --zookeeper localhost:2181
test
注:二者择一的,你也可以配置你的broker当不存在topic时自动创建topics 来代替手动创建topic.

四、发送一些消息

伴随Kafka而来的一个命令行客户端,可以从一个文件或标准输入 获取输入数据,然后作为一个messages 发送给Kafka集群. 默认的每行将作为一条单独的消息发送.
运行producer ,然后在控制台输入一些消息发送给 服务端。
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is anther message

五、启动一个Consumer

Kafka也提供了一个consumer 命令行客户端,并将消息在在控制台标准的展示出来.
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
This is a message
This is anther message

你可以在一个终端运行consumer,另一个终端运行producer,然后你在producer输入消息,就可以看在你输入的消息在consumer端展示出来了.

所有的命令行工具都有额外的可选操作。 运行这个命令不带任务参数,将会展示详细的使用方法。
例如:



六、搭建一个 multi-broker 的集群

目前为止,我们启动了单个broker,但是那样不好玩.  对于Kafka而言,单一的broker 只是一个集群中大小的一个, 所以没有什么变化除了启动多个broker实例。只是去感受下,我们来扩展我们的集群到三个节点 (仍然在我们本地的机器上).

首先为每一个broker制作一个配置文件.

[root@yulei kafka_2.11-0.10.0.0]# cp config/server.properties config/server-1.properties
[root@yulei kafka_2.11-0.10.0.0]# cp config/server.properties config/server-2.properties

现在让我们刚刚新建的2个文件配置如下属性.

config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1 config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2

broker.id  这个属性在集群(cluster)中唯一的标识一个节点(node)。 我们重写了端口和日志目录,因为我们在同一台机器上运行这些broker,需要阻止broker注册同一端口和修改彼此数据。

我们已经启动了一个Zookeeper和一个单节点broker,所以接下来只要启动上面两个新的节点。

[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-server-start.sh config/server-1.properties &
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-server-start.sh config/server-2.properties &

现在创建一个拥有三个副本的、一个分区的Topic.

[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
Created topic "my-replicated-topic".

好了,现在我们搭建了一个集群,但是我们怎么知道每个节点的信息呢,运行"describe topics"命令看看:

[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic       PartitionCount:1        ReplicationFactor:3     Configs:
        Topic: my-replicated-topic      Partition: 0    Leader: 1       Replicas: 1,2,0 Isr: 1,2,0

这里解释一下上面的输出 :第一行是对所有分区的一个总结,其余每一行介绍每一个分区的信息.  因为我们的Topic 只有一个分区,所以第一行下面只加了一行。

下面介绍一下上面输出的各个字段的含义:

  • "leader"  节点负责给定分区 消息的读和写,leader 节点是从分区中所有节点中随机选择的."replicas"
  • "replicas" 列出了该分区复制日志的节点,不管节点是否是Leader节点或是否在服务运行中.
  • "isr" 是 "同步" replicas 的一个集合。是 "replicas" 的一个子集,列出当前运行服务的节点 和以后的Leader节点
在我们的例子当中,节点(node) 1 是  该topic 唯一分区的一个leader。


我们可以运行同样的命令对于我们最开始创建的topic test:
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0

这里没有什么好惊讶的,原始的topic  "test" 没有副本 运行在Server 0 ,这个Server 0是我们创建时在集群中的唯一Server.



让我们发布一些消息到我们新的Topic.
[root@yulei kafka_2.11-0.10.0.0]#  bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
....
my test message 1
my test message 2
^C[root@yulei kafka_2.11-0.10.0.0]#

让我们消费上面发布的消息:

^C[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
....
my test message 1
my test message 2

现在让我们来测一下容错能力. Broker 1  扮演者Leader的角色,所以我们把node 1的服务停了,即server-1.properties配置文件对应的那个服务.

注:官网上的如下命令查询的时候,命令行没有任何显示,查询不到对应broker 的进程,ps  -ef 可以查询所有的进程,但是也看不出哪个进程对应哪个服务,所以测试的时候,启动命令后面不要加& ,这样关闭服务的时候可以直接在启动终端ctrl+C来关闭对应的broker服务,暂时还没有找到好的方法,有知道的朋友可以留言分享下,谢谢.

 ps | grep server-1.properties

然后用--describe命令查看下,另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中:


虽然最初负责写leader的down掉了,但是之前的消息还是可以消费的.

^C[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2

Kafka学习笔记2: 快速入门的更多相关文章

  1. C++ Primer学习笔记_1_快速入门

    C++快速入门 一 编写简单程序 // main是操作系统唯一显示调用的函数int main() {/**return返回的值是一个状态指示器 0:成功 非0:返回错误给OS*以echo $?命令可以 ...

  2. 学习笔记-CCS-MSP430F5529[快速入门篇二]

    由于2021的全国电赛延期了,从今天开始打算好好整理一下使用CCS编程的经验,本篇笔记会好好整理一下我备赛期间用CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输入捕获,PWM波输出,UAR ...

  3. Vue 学习笔记之快速入门篇

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与 ...

  4. 学习笔记-CCS-MSP430F5529[快速入门篇一]

    由于最近竞赛需要使用TI公司的MSP430系列芯片,本人在最近两天匆忙的学习了一下MSP430F5529(下文统一称作5529)的使用.写下本文是为了将这两天学习内容做一个复习,并且将学习过程中遇到的 ...

  5. webpack 学习笔记 02 快速入门

    webpack 的目标 将依赖项分块,按需加载. 减少web app的初始加载时间. 使每一个静态集合都能够作为组件使用. 有能力集成第三方库,作为组件使用. 高度可配置化. 适用于大型项目. INS ...

  6. kafka学习笔记(一)消息队列和kafka入门

    概述 学习和使用kafka不知不觉已经将近5年了,觉得应该总结整理一下之前的知识更好,所以决定写一系列kafka学习笔记,在总结的基础上希望自己的知识更上一层楼.写的不对的地方请大家不吝指正,感激万分 ...

  7. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  8. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  9. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

随机推荐

  1. How to preview html file in our browser at sublime text?

    sublime preview html.md open In Browser what should we do if we want to preview html file in our bro ...

  2. pat 1001 A+B Format

    题目链接:传送门 题目简述: 1. 给定两个整数值a,b: 2.范围-1000000 <= a, b <= 1000000: 3.按指定格式输出结果 例:-100000 9 输出: -99 ...

  3. [Luogu 1730]最小密度路径

    Description 给出一张有N个点M条边的加权有向无环图,接下来有Q个询问,每个询问包括2个节点X和Y,要求算出从X到Y的一条路径,使得密度最小(密度的定义为,路径上边的权值和除以边的数量). ...

  4. [JSOI2007]文本生成器

    题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版. 该软件可以随机生成一些文章―――总是生成一篇长度 ...

  5. [HNOI2016]树

    Description 小A想做一棵很大的树,但是他手上的材料有限,只好用点小技巧了.开始,小A只有一棵结点数为N的树,结 点的编号为1,2,…,N,其中结点1为根:我们称这颗树为模板树.小A决定通过 ...

  6. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. ubuntu linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)

    shmget int shmget(key_t key, size_t size, int flag); key: 标识符的规则 size:共享存储段的字节数 flag:读写的权限 返回值:成功返回共 ...

  8. 某些情况下调用函数为什么要在函数名前加“(void)”

    我们知道,在定义函数时,加在函数名前的"void"表示该函数没有返回值.但在调用时,在函数名前加"(void)"的作用又是什么呢? 最明显的一点就是表示程序并不 ...

  9. PowerBI 第九篇:修改查询

    在PowerBI的查询编辑器中,用户可以使用M语言修改Query,或修改Query字段的类型,或向Query中添加数据列(Column),对Query进行修改会导致PowerBI相应地更新数据模型(D ...

  10. target-densitydpi=device-dpi会使其他ui插件布局变小

    target-densitydpi=device-dpi会使其他ui插件布局变小 东哥说:不用rem了,把meta改成这样<meta name="viewport" cont ...