环境CentOS7.0,JDK1.8

一、下载安装

在kafka官网 http://kafka.apache.org/downloads下载到最新的kafka安装包

下载 2.0.0 release,解压.
> tar -xzf kafka_2.11-2.0.0.tgz
> cd kafka_2.11-2.0.0

在kafka解压目录下下有一个config的文件夹,里面放置的是配置文件

  consumer.properites 消费者配置,可以使用默认设置

  producer.properties 生产者配置,可以使用默认设置

  server.properties kafka服务器的配置,此配置文件用来配置kafka服务器,常用的配置

broker.id 申明当前kafka服务器在集群中的唯一ID,需配置为integer,并且集群中的每一个kafka服务器的id都应是唯一的,这里采用默认配置即可

listeners 申明此kafka服务器需要监听的端口号,如果是在本机上跑虚拟机运行可以不用配置本项,默认会使用localhost的地址,如果是在远程服务器上运行则必须配置,例如:
listeners=PLAINTEXT:// 192.168.10.1:9092。并确保服务器的9092端口能够访问 zookeeper.connect 申明kafka所连接的zookeeper的地址 ,需配置为zookeeper的地址,如果使用自带的zookeeper版本,使用默认配置即可zookeeper.connect=localhost:2181

二、启动kafka服务

启动kafka前需要先启动zookeeper,如果设备上没有安装,可以使用kafka安装包里自带的zookeeper,这是一个单节点便捷版zookeeper。

启动zookeeper...
> bin/zookeeper-server-start.sh config/zookeeper.properties
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...
启动kafka服务
> bin/kafka-server-start.sh config/server.properties
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...

三、创建一个topic

Topic即主题,通过对消息指定主题可以将消息分类,消费者可以只关注自己需要的Topic中的消息。

物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上,但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处。

创建一个名为test的topic,只有一个分区,一份副本(即除了自己没有其他副本)

创建topic
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看运行的topic
> bin/kafka-topics.sh --list --zookeeper localhost:2181
test

四、创建一个消息的生产者

Producer,指消息的产生者,或者,消息的写端,向Kafka集群发送消息,在发送消息之前,会对消息进行分类,即Topic

kafka包里提供了控制台的消息生产方式

创建对kafka服务(正在侦听9092端口,在server.properties里配置)的test主题消息生产者
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message

五、创建一个消息的消费者

Consumer,指消息的消费者,或者,消息的读端,消费者通过与kafka集群建立长连接的方式,不断地从集群中拉取(pull方式)消息,然后可以对这些消息进行处理。

Consumer Group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)。

kafka包里提供了控制台的消息消费方式

创建消息消费者
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

到这里,一个简单的kafka的服务搭建完成

六、kafka集群

在同一台设备搭建一个kafka集群,主要给kafka服务定义不同侦听端口就可以。

先复制两份服务配置文件
> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties
然后修改两个配置文件以下节点
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1 config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2

broker,指消息服务器,Producer 产生的消息都是写到这里,Consumer 读消息也是从这里读

broker.id 申明当前kafka服务器在集群中的唯一ID,需配置为integer,并且集群中的每一个kafka服务器的id都应是唯一的

确保zookeeper运行,并且之前启动的单节点kafka服务也确保运行着,这样,我们就有三个kafka服务。

启动server-1和server-2
> bin/kafka-server-start.sh config/server-1.properties
...
> bin/kafka-server-start.sh config/server-2.properties
...

创建一个使用三份副本的topic

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

这个时候我们可以看看这几个broke都干啥,使用kafka-topics的--describe参数

> 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
  • "leader" 简单的说就是主节点,读写都是它负责。
  • "replicas" 副本列表,表示副本分布在哪些代理上,且该列表第一个元素就是Leader副本所在代理。
  • "isr" 副本子集,是指消息同步的集合,这个列表的副本都是存活的

现在可以试试发送和接收消息:

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
...
my test message 1
my test message 2
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2

七、测试一下集群的容错性

现在leader是broke 1,我们找到它,然后杀死进程

> ps aux | grep server-1.properties
7564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8/Home/bin/java...
> kill -9 7564

然后通过参数--describe看看变化

> 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: 2 Replicas: 1,2,0 Isr: 2,0

leader已经变成broke 2,并且Isr里broke 1已经被排除,也就是数据不同步到broke 1

之前写入的消息依然有效

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2

然后,我们再重新启动server-1,并且查看状态

> 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: 2 Replicas: 1,2,0 Isr: 2,0,1

broke 1又回到同步列表里。

 八、常用命令

Kafka bin/ 目录下的工具:
bin/connect-distributed.sh bin/kafka-consumer-offset-checker.sh bin/kafka-replica-verification.sh bin/kafka-verifiable-producer.sh
bin/connect-standalone.sh bin/kafka-consumer-perf-test.sh bin/kafka-run-class.sh bin/zookeeper-security-migration.sh
bin/kafka-acls.sh bin/kafka-mirror-maker.sh bin/kafka-server-start.sh bin/zookeeper-server-start.sh
bin/kafka-configs.sh bin/kafka-preferred-replica-election.sh bin/kafka-server-stop.sh bin/zookeeper-server-stop.sh
bin/kafka-console-consumer.sh bin/kafka-producer-perf-test.sh bin/kafka-simple-consumer-shell.sh bin/zookeeper-shell.sh
bin/kafka-console-producer.sh bin/kafka-reassign-partitions.sh bin/kafka-topics.sh
bin/kafka-consumer-groups.sh bin/kafka-replay-log-producer.sh bin/kafka-verifiable-consumer.sh 常用的命令有以下几个: bin/kafka-server-start.sh -daemon config/server.properties
bin/kafka-topics.sh --describe --zookeeper 192.168.10.31:2181 --topic topic1
bin/kafka-topics.sh --list --zookeeper 192.168.10.31:2181
bin/kafka-topics.sh --delete --zookeeper 192.168.10.31:2181 --topic topic1
bin/kafka-topics.sh --create --zookeeper 192.168.10.31:2181 --replication-factor 3 --partitions 2 --topic topic1
bin/kafka-console-consumer.sh --bootstrap-server 192.168.10.31:9092 --topic topic1 --from-beginning
bin/kafka-console-producer.sh --broker-list 192.168.10.31:9092 --topic topic1
删除主题:
在server.properties配置
delete.topic.enable=true #默认是false 删除主题数据:
在server.properties中配置
log.retention.hours=168 //保留时间,单位小时
log.retention.check.interval.ms=300000 //保留时间检查间隔,单位毫秒

九、其他

如果想继续运行其他命令,不关闭当前窗口,可以加“&“,就可以后台运行了:

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

kafka搭建笔记的更多相关文章

  1. kafka 入门笔记 #1

    kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...

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

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

  3. 21.TFS文件系统搭建笔记

    TFS文件系统搭建笔记 参考地址: https://github.com/alibaba/tfs/blob/master/INSTALL.md https://github.com/alibaba/t ...

  4. CentOS6.8下MySQL MHA架构搭建笔记

    转载请注明出处,本文地址:http://www.cnblogs.com/ajiangg/p/6552855.html 以下是CentOS6.8下MySQL MHA架构搭建笔记 IP资源规划: 192. ...

  5. kafka读书笔记《kafka权威指南》2018

    1.有了分区,可以多个client消费一个topic,有了分区,可以将一个topic 分散在多个broker 2.kafka通过复制实现可靠,通过横向扩展提高性能(如增加分区.客户端.增加broker ...

  6. kafka搭建到配置borker集群(项目开发-区块链)

    (以下分享了搭建kafka需要使用到的命令,差不多齐了,这里没有提到kafka-manager ,同学可以在网上自行查找) 最近公司的项目比较紧,先说下使用kafka的用处: 要替代原来 撮合引擎发数 ...

  7. 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记

    近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...

  8. kafka搭建相关可能出现的bug

    在Kafka搭建时,首先安装zookeeper,新版本直接解压,启动就好了.由于什么原因,在虚拟机下,必须用root账户启动zookeeper,不然其中一个文件由于没有权限无法创建,导致zookeep ...

  9. Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer

    Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer: 启动Zookeeper 启动Kafka0.11 创建一个新的Topic: ./kafk ...

随机推荐

  1. 【LG1527】[国家集训队]矩阵乘法

    [LG1527][国家集训队]矩阵乘法 题面 洛谷 题解 我也不知道为什么取个这样的名字... 其实就是区间\(kth\)扩展到二维 还是用整体二分搞啦,把树状数组换成二维的 其他的基本没有什么差别 ...

  2. 用CRF做命名实体识别(二)

    用CRF做命名实体识别(一) 用CRF做命名实体识别(三) 一. 摘要 本文是对上文用CRF做命名实体识别(一)做一次升级.多添加了5个特征(分别是词性,词语边界,人名,地名,组织名指示词),另外还修 ...

  3. 使用materialization

    explain select `countries`.`id` AS `id`,`countries`.`sortname` AS `sortname`,`countries`.`name` AS ` ...

  4. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理

    C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理 当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学 ...

  5. 「日常训练」Uncle Tom's Inherited Land*(HDU-1507)

    题意与分析 题意是这样的:给你一个\(N\times M\)的图,其中有一些点不能放置\(1\times 2\)大小的矩形,矩形可以横着放可以竖着放,问剩下的格子中,最多能够放多少个矩形. 注意到是\ ...

  6. 韦大仙--Katalon---一款好用的selenium自动化测试插件

    selenium框架是目前使用较广泛的开源自动化框架,一款好的.基于界面的录制工具对于初学者来说可以快速入门:对于老手来说可以提高开发自动化脚本的效率.我们知道Selenium IDE是一款使用较多的 ...

  7. (Python爬虫02) 制定爬虫的学习计划了

    公司清退是件很让人郁闷的事情,精,气,神 都会受到影响.焦虑的心态,涣散的眼神, 无所适从的若无其事,人周茶凉的快速交接,各种担忧....平静的面孔波涛汹涌的心.... 认识聊天中满满的套路...还有 ...

  8. 日历(Calendar)模块

    #usr/bin/python3 #! -*-conding : utf-8 -*- #2018.3.14 """ 日历(Calendar)模块 此模块的函数都是日历相关 ...

  9. Django创建App报错

    在django下创建APP项目时遇到的坑 python manage.py startapp app01 报错内容如下: 解决:找到报错中的文件夹151行删除items(),)中的逗号即可 在命令行下 ...

  10. ubuntu ssh配置

    Secure Shell (SSH) is a cryptographic network protocol for operating network services securely over ...