Kafka 急迅启动(澳门美高梅手机网站作者:杜亦舒)

HDFS 焦点原理

2016-01-11 杜亦舒

HDFS(Hadoop Distribute File System)是一个分布式文件系统

文件系统是操作系统提供的磁盘空间管理服务,只必要大家指定把文件放到何地,从哪些路径读取文件句可以了,不用关切文件在磁盘上是哪些存放的

当文件所需空间大于本机磁盘空间时,怎么着处理啊?

一是加磁盘,但加到一定程度就有限定了

二是加机器,用长途共享目录的格局提供互连网化的囤积,那种艺术得以清楚为分布式文件系统的雏形,可以把不一致文件放入分歧的机器中,空间不足了足以连续加机器,突破了仓储空间的限定

但以此法子有四个难题

(1)单机负载可能极高

比如说某个文件是走俏,很多用户时时读取这么些文件,就使此文件所在机器的造访压力极高

(2)数据不安全

如若某个文件所在的机器现离世障,那么些文件就无法访问了,可相信性很差

(3)文件整理困难

例如想把有些文书的积存地方展开调整,就要求看目的机器的上空是还是不是够用,并且须求协调维护文件地方,假若机器分外多,操作就颇为错综复杂

HDFS的化解思路

 

HDFS是个抽象层,底层看重很多独自的服务器,对外提供联合的公文管理功效,对于用户来讲,感觉就想在操作一台机械,感受不到HDFS上边的多台服务器

譬如说用户访问HDFS中的 /a/b/c.mpg
这么些文件,HDFS负责从底层相应服务器中读取,然后回到给用户,那样用户只需和HDFS打交道,不关切那么些文件是怎么存储的

澳门美高梅手机网站 1
写文件示例

 

比如用户需求保留一个文本 /a/b/xxx.avi 

HDFS首先会把这几个文件进行分割,例如分为4块,然后分别放置不一致服务器上

澳门美高梅手机网站 2

如此这般做有个便宜,不怕文件太大,并且读文件的压力不会全都集中在一台服务器上

但如若某台服务器坏了,文件就读不全了

HDFS为保障文件可相信性,会把各种文件块举办几个备份

块1 : A B C 
块2 : A B D
块3 : B C D 

块4 : A C D

澳门美高梅手机网站 3
如此那般文件的可依赖性就大大增强了,固然某个服务器坏了,也得以完全读取文件

再者还带来一个很大的裨益,就是增多了文件的产出访问能力,比如多个用户读取这么些文件时,都要读块1,HDFS可以根据服务器的农忙程度,选择从哪台服务器读块1

元数据的管制

HDFS中存了如何文件?

文本被分为了什么样块?

每个块被放在哪台服务器上?

……

那几个都叫做元数据,这个元数据被架空为一个目录树,记录了那么些扑朔迷离的照应关系

这几个元数据由一个独自的模块举行田间管理,那个模块叫做 NameNode

寄存文件块的忠实服务器叫做 DataNode

因而用户访问HDFS的进度可以掌握为:

用户 -> HDFS -> NameNode -> DataNode

HDFS 优点

(1)容量可以线性增加

(2)有副本机制,存储可依赖性高,吞吐量增大

(3)有了NameNode后,用户访问文件只需点名HDFS上的门径

Kafka 飞快启动

原创 2017-01-05 杜亦舒 性能与架构

首要内容:

  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 就会面到刚刚添加的多寡:

    

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注