在开始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. Jenkins持续集成演示

    1.去我们的仓库修改一下代码 为了节约时间,我直接在网页上改了. 我们把布局页的footer信息改一下: 然后提交. 2.切换到Jenkins可以看到已经在构建了 等待构建完成. 3.访问我们部署的地 ...

  2. 【实验吧】CTF_Web_简单的SQL注入之2

    直接输入11'报语法错误,然后输入1' and '1'='1 报SQLi detected!,说明有防护,输入1'and'1'='1回显ID: 1'and'1'='1  name: baloteli ...

  3. 【实验吧】CTF_Web_登录一下好吗?

    实验吧CTF---Web篇 1. 打开登录地址(http://ctf5.shiyanbar.com/web/wonderkun/web/index.html),发现为一个登录界面,第一想到的是查看源代 ...

  4. [HNOI 2001]软件开发

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  5. ●BZOJ 3566 [SHOI2014]概率充电器

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3566题解: 概率dp,树形dp 如果求出每个点被通电的概率t, 那么期望答案就是t1×1+t ...

  6. ●CodeChef Sereja and Game

    题链: https://www.codechef.com/problems/SEAGM题解: 概率dp,博弈论 详细题解:http://www.cnblogs.com/candy99/p/650434 ...

  7. ●BZOJ 1233 [Usaco2009Open] 干草堆 tower

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1233 留坑.以后再来看看. (绝望,无奈,丧心...) (这个题的证明真的很诡异啊,看得我稀 ...

  8. bzoj4830 hnoi2017 抛硬币

    题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生.勤勉的小 A ...

  9. 树莓派超声波测距+蜂鸣器(c语言)

    前边我们已经详细的讲解了树莓派控制超声波模块测距(http://www.cnblogs.com/yuemo/p/8888342.html)和超声波控制蜂鸣器模块发声(http://www.cnblog ...

  10. Mybatis迷你版--QueryObjectFactory

    今天在看JDBC4.2新规范,然后无意之间就碰到了这个东西QueryObjectFactory, 市面上orm框架有很多,在这里我就不一一列举了.那么今天我来记录一下QueryObjectFactor ...