Kafka 快速起步

主要内容: 1. kafka 安装、启动 2. 消息的 生产、消费 3. 配置启动集群 4. 集群下的容错测试 5. 从文件中导入数据,并导出到文件

单机示例

安装

tar -xzf kafka_2.10-0.10.1.1.tgz
cd kafka_2.10-0.10.1.1

启动

> bin/zookeeper-server-start.sh \
config/zookeeper.properties
> bin/kafka-server-start.sh \
config/server.properties

创建topic

打开一个新的终端窗口

bin/kafka-topics.sh --create \
--zookeeper localhost:2181 \
--replication-factor 1 \
--partitions 1 \
--topic test

发送消息

打开一个新的终端窗口

bin/kafka-console-producer.sh \
--broker-list localhost:9092 \
--topic test

进入输入模式,随意输入信息,例如:

hello world
hi

获取消息

打开一个新的终端窗口

bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic test \
--from-beginning

便会显示出刚才发送的两条消息:

hello world
hi

这时可以打开发送消息的终端窗口,输入新的信息,再返回来就可以看到自动接收到了新消息

配置集群

新建两个启动配置文件

> 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.dir=logs/kafka-logs-1

修改 config/server-2.properties 的以下几项配置:

broker.id=2
listeners=PLAINTEXT://:9094
log.dir=logs/kafka-logs-2

启动

> bin/kafka-server-start.sh \
config/server-1.properties &
> bin/kafka-server-start.sh \
config/server-2.properties &

创建一个topic,设置3个复制

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

发送消息

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

可以正常取得消息

容错测试

# 取得server1的进程号
ps aux | grep server-1.properties

# 杀掉进程
kill -9 43116

读取消息

bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--from-beginning \
--topic my-replicated-topic

返回信息:

my test message 1
my test message 2

仍然可以正常取得消息

Kafka Connect

Kafka 中的 connecter 可以与外部系统进行连接,例如文件系统、数据库

下面实验一个简单文件系统交互,从一个文件中导入数据,然后导出到另一个文件中

创建一个测试文件,用于导入数据使用

echo -e "foo\nbar" > test.txt

启动 connect,执行数据的导入导出

bin/connect-standalone.sh \
config/connect-standalone.properties \
config/connect-file-source.properties \
config/connect-file-sink.properties

命令执行后,会输出一系列的日志信息,等待执行完毕

查看导出结果

cat test.sink.txt

返回结果:

foo
bar 

成功导出了 test.txt 中的数据

过程分析

执行第2步的命令后,为什么是去读test.txt?为什么写入了test.sink.txt?中间的过程是什么样的?

原因是在于两个配置文件

config/connect-file-source.properties (导入配置)

name=local-file-source
connector.class=FileStreamSource
tasks.max=1
file=test.txt
topic=connect-test  

file指定了是从test.txt中导入数据

topic指定了把数据发送到connect-test这个topic

connect-file-sink.properties(导出配置)

name=local-file-sink
connector.class=FileStreamSink
tasks.max=1
file=test.sink.txt
topics=connect-test

file指定了把数据导出到test.txt中导入数据

topic指定从connect-test这个topic中读取数据

查看一下connect-test这个topic

bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic connect-test \
--from-beginning

结果为:

{"schema":{"type":"string","optional":false},"payload":"foo"}
{"schema":{"type":"string","optional":false},"payload":"bar"}

现在向test.txt中添加一条新数据:

echo "Another line" >> test.txt

再次执行 cat test.sink.txt 就会看到刚刚添加的数据:

foo
bar
Another line        

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2017-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

grunt安装

随着node的流行,各种后台的技术应用到前端,依赖注入、自动化测试、构建等等。 本篇就介绍下如何使用Grunt进行构建。 grunt安装   由于gru...

26610
来自专栏xiaoxi666的专栏

配置多个git账号的ssh密钥

我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目。出于各种原因,自己的 github 项目无法使用公司的...

1912
来自专栏java架构师

Hadoop总结篇之五---模块间是怎么驱动执行的

在MRv1中,各个模块间驱动运行的方式是函数调用的方式。这是同步的过程,上一模块调用下一模块函数后,等待其执行。效率不高。 在MRv2中做了改进,yarn基于事...

2865
来自专栏IT可乐

Linux 安装JDK

1、下载 JDK Linux 版本(注意看自己安装 Linux 系统的位数)   oracle 官网下载地址:jdk-7u80-linux-x64.gz   百...

67111
来自专栏Web 开发

为什么我的iptables一重启就失效了?

搭了个VPN,但是默认VPN没有在做转发,用的iptables做的nat转发,可是每次重启,都需要重新执行iptables命令。

1140
来自专栏闵开慧

ubuntu中使用网络安装mysql

现在的软件越来越好安装,尤其是在ubuntu下安装软件,更是没有技巧,只需要在联网的情况下使用apt-get inatll 即可。在决定安装mysql之前,要...

3557
来自专栏Samego开发资源

轻松挂载远程目录 | sshfs

4005
来自专栏L宝宝聊IT

Squid代理服务器应用示例

5163
来自专栏javathings

Maven 生命周期(需了解)

Maven 中定义了三种标准的生命周期:清理(clean),默认(default)(有时候也称为构建),和站点(site)。 这三种生命周期互相独立。每种生命...

2814
来自专栏吴伟祥

基于 CentOS 搭建 FTP 文件服务

此时,访问 ftp://<您的 CVM IP 地址> 可浏览机器上的 /var/ftp 目录了。

4243

扫码关注云+社区

领取腾讯云代金券