kafka安装

kafka特点: 
高吞吐量、低延迟: 
针对生产者发布及消费者订阅消息 
kafka每秒可以处理几十万条数据 
读写的延迟最低几毫秒  
高并发: 
一个kafka的broker节点可以并发处理几千个客户端的百兆数据的读写请求 
一个kakfa集群是由多个broker节点服务器组成的 
broker节点负责持久化和备份具体的kafka消息   
可扩展性: 
集群支持热扩展 
易扩展  
持久化、可靠性: 
消息会被持久化到broker本地磁盘,并且支持备份防止数据丢失
消息的默认保留时间是7天 
容错性: 
允许集群中broker节点宕机 
运行宕机的最多broker节点数量为 副本数量的 n-1   

kafka和hdfs底层数据存储没有任何关系
kafka是一个独立的物理集群  

----------------------------------------------

kafka的集群架构  
broker  
消息中间存储及处理节点,一个kafka集群由多个broker节点组成
topic  
生产在将消费推送给kafka集群时都有对应的主题
消费者到对应的主题去订阅消费消息
同一个主题就是同一类消息的存储
在一个kafka集群上可以维护n多个topic主题 
zookeeper 
kafka强依赖zookeeper  
kafka所有broker节点的状态资源信息及所有的topic主题元数据信息都保存在zookeeper上
元数据: 
kafka集群上有哪些topic主题 
每个topic有几个partition分区 -- 类似hbase的region  
每个partition的分布位置信息 
每个partition的副本数量及副本的分布位置 
在partition的副本中有一个是leader partition 
zookeeper负责leader partition的选举工作
zookeeper同时也负责leader partition的 fail over 
leader partition 的作用? 
负责作为多个副本的代表响应生产者和消费者的读写请求
负责多个副本之间的数据的同步工作  
zookeeper监控broker节点的状态故障后迅速做出容灾处理   
通过zookeeper管理broker及consumer的动态加入及离开  




-------------------------------------------------------


topic 物理存储模型及重要概念讲解: 


partition(分区) : 
是topic在物理上的分区,一个topic可以分为多个partition(对比hbase的region) 
一个topic在本地磁盘目录下是一个单独的目录  
分区的个数可以在创建topic时进行指定(对比hbase的预分区)
partition分区是一个有序的队列,生产者的消息都是有序的追加到对应的partition上
每个partition都自己的多个replica 副本
在partition的副本中有一个是leader partition 
zookeeper负责leader partition的选举工作
zookeeper同时也负责leader partition的 fail over 
leader partition 的作用? 
负责作为多个副本的代表响应生产者和消费者的读写请求
负责多个副本之间的数据的同步工作  



replica(副本) : 
每个topic/partition都是有副本的
副本的数量在topic创建时指定
副本被分散在不同的broker节点上 ,保证数据的安全性  
副本一般是 3个 ,最小2个  
允许丢失的副本数是n-1  

offset(偏移量): 
partition分区是一个有序的队列,生产者的消息都是有序的追加到对应的partition上 
如何保证有序??? 
partition中追加的每条消息都一个连续的序列号标识,称为offset
offset唯一标识一条消息,相当于消息的索引
offset也可以认为是partition中message的id   

segment(段)
partition是分段的,每个段称为segment  
将partition数据文件进行分段是kafka解决查询效率的手段之一 (使用二分查找法)  

每个段的组成: 
存储了n多条消息数据的一个独立的文件   
命名规则:  该段中最小的offset值.log  
存储了该段消息数据索引的一个索引文件
命名规则:  该段中最小的offset值.index  

----------------------------------------------------------

kafka的安装部署  
版本:
kafka_2.10-0.8.2.1
2.10-》指的是scala版本    
0.8.2.1-》kafka版本号  
官方文档:
http://kafka.apache.org/082/documentation.html#quickstart


1、安装jdk1.7 和 zookeeper并启动zookeeper服务进程   

scala语言是建立在jvm之上的的,所以需要jdk的支持 
scala强依赖zookeeper

$ bin/zkServer.sh start 

2、安装并配置scala  
scala-2.10.4.tgz 上传至linux并解压 
# vi /etc/profile 
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export SCALA_HOME=/opt/modules/scala-2.10.4
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin
# source /etc/profile
# scala -version 
Scala code runner version 2.10.4 -- Copyright 2002-2013, LAMP/EPFL
3、安装kafka  
上传并解压 
4、修改配置文件 

1)server.properties  (kakfa集群broker节点相关配置文件)  

broker.id=0   //如果是kafka集群,则每台broker节点的broker.id的值需要是不同的int值
port=9092   broker节点服务的监听端口 
host.name=192.168.134.101   //当前broker节点所在服务器的主机名或ip


log.dirs=/opt/modules/kafka_2.10-0.8.2.1/data  //kafka消息的本地存储路径  
zookeeper.connect=192.168.134.101:2181  //声明外部独立的zookeeper集群的地址信息 


2)producer.properties (生产者相关配置文件)


metadata.broker.list=192.168.134.101:9092   //声明broker集群的地址,如果有多个broker节点 format: host1:port1,host2:port2 ...


3)consumer.properties (消费者相关配置文件)


zookeeper.connect=192.168.134.101:2181  //声明zookeeper集群地址  


5、启动kafka服务进程  
$ bin/kafka-server-start.sh config/server.properties    //默认是一个前端命令 



--------------------------------------------


kafka的使用  


案例一: 

1、创建一个topic主题
 bin/kafka-topics.sh \
 --create \
 --zookeeper 192.168.134.101:2181 \  
 --replication-factor 1 \   -- 指定副本数
 --partitions 1 \    ---partition分区的个数一般不大于broker节点数 
 --topic test


 
 list当前kafka集群的topic列表 
 
 bin/kafka-topics.sh \
 --list \
 --zookeeper 192.168.134.101:2181


2、启动一个前端命令行生产者 
通过该生产者在命令行发送消息到对应的topic中 
该服务也是一个前端命令


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


3、启动一个前端命令行消费者  


 bin/kafka-console-consumer.sh \
 --zookeeper 192.168.134.101:2181 \
 --topic test \
 --from-beginning


4、在前端命令行生产者发送消息
   到前端命令行消费者观察获取的消息  




----------------------------------------------


案例二: 
生产者flume和kafka整合使用 
基于离线项目平台 

flume-agent的定义: 

flume-agent01类型: 启动在各个客户机(nginx)上  
source-exec : 
tail -f  /usr/local/nginx/datalog/access.log 
channel - mem : 
sink - avro : 
hostname  
port   

flume-agent02类型:  
source-avro : 
hostname/bind
port 
selector.type = replicating(将数据复制后分发给各个channel )
channel_01 -> sink -hdfs    离线的存储 hdfs  
channel_02 -> sink -kafka 实时消费分析 



--------------------------


1、修改
nginx_2_avro.properties  (不用修改)
avro_2_hdfs.properties (需要修改)


--------------------


# The configuration file needs to define the sources, 
# the channels and the sinks.
# Sources, channels and sinks are defined per agent, 
# in this case called 'agent'


## define agent source、 channel、 sinks、name
a2.sources = s2
a2.channels = c2 c3  
a2.sinks = k2 k3


## define sources -avro
a2.sources.s2.type = avro
a2.sources.s2.bind = 192.168.134.101
a2.sources.s2.port = 9999
a2.sources.s2.selector.type = replicating


## define channels -- c2 
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100


## define channels -- c3 
a2.channels.c3.type = memory
a2.channels.c3.capacity = 1000
a2.channels.c3.transactionCapacity = 100




## define sinks - hdfs -k2  
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://192.168.134.101:8020/flume_kafka/%Y%m%d
a2.sinks.k2.hdfs.filePrefix = access_log


## 设置目录按照年/月/日进行回滚
a2.sinks.k2.hdfs.round = true
a2.sinks.k2.hdfs.roundValue = 1
a2.sinks.k2.hdfs.roundUnit = day


## 解决生产很多小文件,设置文件回滚的条件
a2.sinks.k2.hdfs.rollInterval = 0
a2.sinks.k2.hdfs.rollSize = 134217728
a2.sinks.k2.hdfs.rollCount = 0


## 这个参数必须设置,不然上面的回滚设置不生效
a2.sinks.k2.hdfs.minBlockReplicas = 1


a2.sinks.k2.hdfs.batchSize = 1000
a2.sinks.k2.hdfs.fileType = DataStream
a2.sinks.k2.hdfs.writeFormat = Text
a2.sinks.k2.hdfs.useLocalTimeStamp = true 


## define sinks - kafka -k3  
a2.sinks.k3.type = org.apache.flume.sink.kafka.KafkaSink
a2.sinks.k3.brokerList = 192.168.134.101:9092
a2.sinks.k3.topic = test




## 关联 sources和 sinks
a2.sources.s2.channels = c2 c3  
a2.sinks.k2.channel = c2
a2.sinks.k3.channel = c3




-------------------





2、启动两个flume-agent进程 
41762 Kafka
7873 QuorumPeerMain
    6692 NameNode
6789 DataNode


$ bin/flume-ng agent --name a1 --conf conf/ --conf-file conf/nginx_2_avro.properties  & 
$ bin/flume-ng agent --name a2 --conf conf/ --conf-file conf/avro_2_hdfs.properties  & 

3、查看hdfs上的数据 
/flume_kafka/20170801

4、启动一个前端命令行消费者监控test主题中的message 
  
$  bin/kafka-console-consumer.sh  --zookeeper 192.168.134.101:2181  --topic test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值