kafka环境
二、环境搭建
参考:http://kafka.apache.org/documentation.html#quickstart
Step 1: 下载Kafka
wget http://mirrors.noc.im/apache/kafka/0.9.0.0/kafka_2.11-0.9.0.0.tgz
解压:
- > tar -xzf kafka_2.9.2-0.8.1.1.tgz
- > cd kafka_2.9.2-0.8.1.1
复制代码
Step 2: 启动服务
Kafka用到了Zookeeper,所有首先启动Zookper,下面简单的启用一个单实例的Zookkeeper服务。可以在命令的结尾加个&符号,这样就可以启动后离开控制台。
- > 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)
- ...
复制代码
Step 3: 创建 topic
创建一个叫做“test”的topic,它只有一个分区,一个副本。
- > bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
复制代码
可以通过list命令查看创建的topic:
- > bin/kafka-topics.sh --list --zookeeper localhost:2181
- test
复制代码
除了手动创建topic,还可以配置broker让它自动创建topic.
Step 4:发送消息.
Kafka 使用一个简单的命令行producer,从文件中或者从标准输入中读取消息并发送到服务端。默认的每条命令将发送一条消息。
运行producer并在控制台中输一些消息,这些消息将被发送到服务端:
- > bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
- This is a messageThis is another message
复制代码
ctrl+c可以退出发送。
Step 5: 启动consumer
Kafka also has a command line consumer that will dump out messages to standard output.
Kafka也有一个命令行consumer可以读取消息并输出到标准输出:
- > bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
- This is a message
- This is another message
复制代码
你在一个终端中运行consumer命令行,另一个终端中运行producer命令行,就可以在一个终端输入消息,另一个终端读取消息。
这两个命令都有自己的可选参数,可以在运行的时候不加任何参数可以看到帮助信息。
Step 6: 搭建一个多个broker的集群
刚才只是启动了单个broker,现在启动有3个broker组成的集群,这些broker节点也都是在本机上的:
首先为每个节点编写配置文件:
- > cp config/server.properties config/server-1.properties
- > cp config/server.properties config/server-2.properties
复制代码
在拷贝出的新文件中添加以下参数:
- config/server-1.properties:
- broker.id=1
- port=9093
- log.dir=/tmp/kafka-logs-1
复制代码
- config/server-2.properties:
- broker.id=2
- port=9094
- log.dir=/tmp/kafka-logs-2
复制代码
broker.id在集群中唯一的标注一个节点,因为在同一个机器上,所以必须制定不同的端口和日志文件,避免数据被覆盖。
We already have Zookeeper and our single node started, so we just need to start the two new nodes:
刚才已经启动可Zookeeper和一个节点,现在启动另外两个节点:
- > bin/kafka-server-start.sh config/server-1.properties &
- ...
- > bin/kafka-server-start.sh config/server-2.properties &
- ...
复制代码
创建一个拥有3个副本的topic:
- > bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
复制代码
现在我们搭建了一个集群,怎么知道每个节点的信息呢?运行“"describe topics”命令就可以了:
- > 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:负责处理消息的读和写,leader是从所有节点中随机选择的.
replicas:列出了所有的副本节点,不管节点是否在服务中.
isr:是正在服务中的节点.
在我们的例子中,节点1是作为leader运行。
向topic发送消息:
- > bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
复制代码
- ...
- my test message 1my test message 2^C
复制代码
消费这些消息:
- > bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
复制代码
- ...
- my test message 1
- my test message 2
- ^C
复制代码
测试一下容错能力.Broker 1作为leader运行,现在我们kill掉它:
- > ps a | grep server-1.properties
- 7564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java...
- > kill -9 7564
复制代码
另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中:
- > bin/kafka-topics.sh --describe --zookeeper localhost:218192 --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 down掉了,但之前的消息还是可以消费的:
- > bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
- ...
- my test message 1
- my test message 2
复制代码
看来Kafka的容错机制还是不错的。
kafka环境的更多相关文章
- kafka环境搭建及librdkafka测试
kafka环境搭建及librdkafka测试 (2016-04-05 10:18:25) 一.kafka环境搭建(转自http://kafka.apache.org/documentation.h ...
- windows下golang实现Kfaka消息发送及kafka环境搭建
kafka环境搭建: 一.安装配置java-jdk (1)kafka需要java环境,安装java-jdk,下载地址:https://www.oracle.com/technetwork/java/j ...
- kafka环境搭建
kafka环境搭建 for mac 对应qq群号:616961231 在之前的文章中, 有学习能力和兴趣爱好的同学,自己动手维护测试环境,丰衣足食是最好的办法,今天我们来讲讲kafka在mac上的安装 ...
- kafka环境搭建和使用(python API)
引言 上一篇文章了解了kafka的重要组件zookeeper,用来保存broker.consumer等相关信息,做到平滑扩展.这篇文章就实际操作部署下kafka,用几个简单的例子加深对kafka的理解 ...
- 【运维技术】从零开始搭建开发使用的Kafka环境
[原创]从零开始搭建开发使用的Kafka环境 入门资料 百度百科: Kafka是一种高吞吐量的分布式发布订阅消息系统,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop ...
- docker搭建kafka环境&&Golang生产和消费
docker 搭建kafka环境 version: '2' services: zk1: image: confluentinc/cp-zookeeper:latest hostname: zk1 c ...
- Linux 下搭建 Kafka 环境
Linux 下搭建 Kafka 环境 作者:Grey 原文地址: 博客园:Linux 下搭建 Kafka 环境 CSDN:Linux 下搭建 Kafka 环境 环境要求 操作系统:CentOS 7 下 ...
- kafka环境搭建2-broker集群+zookeeper集群(转)
原文地址:http://www.jianshu.com/p/dc4770fc34b6 zookeeper集群搭建 kafka是通过zookeeper来管理集群.kafka软件包内虽然包括了一个简版的z ...
- 使用docker搭建kafka环境
Requirements 最近学习了下kafka,为方便搭建环境,使用docker进行部署. 需要首先安装docker的环境.要求操作系统是linux的64位系统. docker的安装(适于rpm/d ...
随机推荐
- Java体系结构---垃圾回收
1 垃圾回收 1.1 JVM的体系结构 1.1.1 JVM 相当与JAVA 的操作系统,是运行JAVA Class文件的程序. 1.1.2 JVM体系 监控调优,运行时内存结构,类加载,calss ...
- swift -- 基础
swift -- 基础 1.常量和变量 常量: let 变量: var 2.声明常量和变量 常量的声明: let let a = 1 //末尾可以不加分号,等号两边的空格必须对应(同 ...
- Ubuntu 不支持 rpm
不是第一次犯这个错误了. 记一下. 每次安装jdk 的时候,习惯性下载rpm包. 然后的,然后在 ubuntu上rpm 安装的时候就跪了.. ubuntu需要使用Alien 把rpm 转成 deb再安 ...
- BFS-基础简单的算法
前言 有时候,当你并不了解很多高级算法的时候,搜索不失为一种解决问题的好方法,而且很多高级算法有或多或少的会用到搜索或者搜索的思想.可见,搜索是一个基础并且必须要掌握的算法. 在这篇文章中,会对BFS ...
- 2017Java技术预备作业1501黄学超
阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我觉得师生关系应当是亲密无间,课上老师讲解学生配合,课下师生交流启发思考. 你有什么技能(学习,棋类,球类,乐器,艺术,游戏,......)比大多 ...
- 文件IO理解
一次读取写入单个字节 public class CopyFileDemo { public static void main(String[] args) throws IOException { F ...
- 新手向:Java基础知识
Java 接口 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并 ...
- Yahoo前端优化十四条军规
相信互联网已经越来越成为人们生活中不可或缺的一部分.Ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功能. 比如Google机会已经把最基本的office应 ...
- 开发Nagios监控passwd文件插件
第一步:开发脚本 [root@Admin libexec]# pwd /usr/local/nagios/libexec [root@Admin libexec]# cat check_passwd ...
- zsh 简单介绍
什么是 zsh,要想解释好这个问题,那么得先说明什么是 shell.不负责任的解释说法就是 shell 就是一个壳.这个壳可不是蜗牛的壳,而是计算机的一个壳,当然也不是计算机的外壳啦,这个壳是相对于计 ...