Kafka框架基础
* Kafka框架基础
官网:kafka.apache.org
框架简介
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。
相关概念
** 生产者
提供数据源生产的地方,对于同一个topic,生产者只能有一个,这样可以确保同一个topic数据来自同一个业务数据,支持多并发
** 消费者
消费数据的客户端,对于同一个topic,可以有多个消费者,比如spark,storm等等
** Broker
消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
** Topic
同一类消息的统称,Kafka集群能够同时负载多个topic分发。
** Partition
topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列,同一个topic里面的数据是存放在不同的分区中。
** Replication
每个分区或者topic都是有副本的,副本的数量也是可以在创建topic的时候就指定好,保证数据的安全性,以及提供高并发读取效率。
** Segment
partition物理上由多个segment组成
** Offset
每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息
框架特色
** 同时为发布和订阅提供高吞吐量。Kafka每秒可以生产约25万消息(约50 MB),每秒处理55万消息(约110 MB)。
** 可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。
** 分布式系统,易于向外扩展。所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。
** 消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。
架构图

* 框架部署
** 相关下载
kafka以及scala:链接:http://pan.baidu.com/s/1pLBFJf1 密码:seto
** 解压Kafka以及scala
$ tar -zxf kafka_2.10-0.8.2.1.tgz -C /opt/modules/cdh/
$ tar -zxf scala-2.10.4.tgz -C /opt/modules/cdh/
** 安装JDK并配置环境变量
不再赘述
** 安装并启动zookeeper
在zookeeper的根目录下:
$ bin/zkServer.sh start
** 配置scala环境变量
# vi /etc/profile
$ source /etc/profile
(注意以上两条语句的执行用户)
添加如下:
##SCALA_HOME
SCALA_HOME=/opt/modules/cdh/scala-2.10.4
export PATH=$PATH:$SCALA_HOME/bin
使用命令检查scala配置是否正确:
$ scala -version,如图:

** 修改Kafka配置文件
server.properties
修改为如下:

producer.properties
变动内容如下:

consumer.properties
变动内容如下:

** 启动Kafka
$ bin/kafka-server-start.sh config/server.properties
** 创建Topic
$ bin/kafka-topics.sh --create --zookeeper z01:2181 --replication-factor 1 --partitions 1 --topic testTopic

** 启动生产者
$ bin/kafka-console-producer.sh --broker-list z01:9092 --topic testTopic

** 启动消费者
$ bin/kafka-console-consumer.sh --zookeeper z01:2181 --topic testTopic --from-beginning

在生产者窗口输入数据,在消费者窗口查看数据,测试如图:
消费者:

生产者:

* 整合测试
使用flume+kafka整合测试
** 配置flume
原来我们配置flume,是在tomcat所在机器节点开启了一个flume收集日志,并直接上传到HDFS,如果集群中存在多个机器节点,则势必导致对HDFS集群占用率过高,所以在面临多个flume集群时,一般会采用1~2个单独的flume节点来收集另外flume节点的日志,相当于弄了一个中转站,由中转站收集其他flume,再统一放置到HDFS系统中,此刻我们采用方案2,原理如图:

背景:在一台机器上开两个flume,分别收集tomcat日志和hive日志,这两者的日志信息分别输入到中间层flume(这个中间层flume也模拟在同一个机器节点上),然后中间层flume在将数据写入到HDFS。
首先检查一下hive的conf目录下的hive-log4j.properties配置中,是否已经指定了hive的日志目录,如果没有,请指定,如图:

涉及flume文件:以下文件存在于flume的conf目录下,如果不存在,请自行创建即可。
flume-apache-log-kafka.conf

flume-hive-log-kafka.conf

flume-connector-kafka.conf

依次启动:
a4:
$ bin/flume-ng agent --conf conf/ --name a4 --conf-file conf/flume-connector-kafka.conf
a3:
$ bin/flume-ng agent --conf conf/ --name a3 --conf-file conf/flume-hive-log-kafka.conf
a2:
$ bin/flume-ng agent --conf conf/ --name a2 --conf-file conf/flume-apache-log-kafka.conf
测试后如图,即可发现,日志在HDFS和kafka中都已经显示出来:

个人微博:http://weibo.com/seal13
QQ大数据技术交流群(广告勿入):476966007
作者:Z尽际
链接:https://www.jianshu.com/p/a24af7a86392
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Kafka框架基础的更多相关文章
- Apache Kafka框架学习
背景介绍 消息队列的比较 kafka框架介绍 术语解释 文件存储 可靠性保证 高吞吐量实现 负载均衡 应用场景 背景介绍: kafka是由Apache软件基金会维护的一个开源流处理平台,由scala和 ...
- 实践部署与使用apache kafka框架技术博文资料汇总
前一篇Kafka框架设计来自英文原文(Kafka Architecture Design)的翻译及整理文章,非常有借鉴性,本文是从一个企业使用Kafka框架的角度来记录及整理的Kafka框架的技术资料 ...
- Flume框架基础
* Flume框架基础 框架简介: ** Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. ** Flume基于流式架构,容错性 ...
- Hibernatel框架基础使用
Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...
- Struts2框架基础
Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- 框架基础之Hibernate简介
框架基础之Hibernate简介 1.什么是Hibernate? Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来 ...
- ThinkPHP框架基础
ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...
- Python云端系统开发入门——框架基础
Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...
随机推荐
- Light OJ 1317 Throwing Balls into the Baskets 概率DP
n个人 m个篮子 每一轮每一个人能够选m个篮子中一个扔球 扔中的概率都是p 求k轮后全部篮子里面球数量的期望值 依据全期望公式 进行一轮球数量的期望值为dp[1]*1+dp[2]*2+...+dp[ ...
- iOS:简单使用UIAlertVIew和UIActionSheet
做iOS开发的同学想必都用过UIAlertVIew或者UIActionSheet.UIAlertVIew 可以弹出一个出现在屏幕中间的提示视图,给用户展示信息,并让用户自己选择操作,UIActionS ...
- Redis-3-string类型
Redis-3-string类型 标签(空格分隔): redis set key value [ex 秒数] / [px 毫秒数] [nx] /[xx] mset key value key valu ...
- 133.throw机制 抛出类类型
#include <iostream> using namespace std; //try尝试执行,抛出throw,throw之后语句不再执行 //catch处理throw的异常 voi ...
- WIN32常用
//1.设置窗口大小 MoveWindow(hWnd, , , + , + , FALSE); //放在InitInstance用于设置位置与窗口大小 //传递句柄就可以绘图 //2.双缓冲绘图模式 ...
- mysql表空间传输(ERROR 1808) row_format设置
文章结构如下: 从MYSQL5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者机器上.迁移的时候很方便,尤其是大表. 由于本次达到测试使用版本5.6.38传到5.7 ...
- IEEE的论文需要注意的一些
详细看最近的IEEE会议模板的时候,忽然注意到表的注序号应该用字母:另外,引用未发表的论文,如果是archive上的要使用archive规定的方法,或者标注``unpublished''
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16425 Accepted: 5797 Descr ...
- 复制excel表,往excel表中写入数据
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...
- Shiro结合Spring boot开发权限管理系统
前一篇文章说了,我从开始工作就想有一个属于自己的博客系统,当然了,我想的是多用户的博客,大家都可以发文章记笔记,我最初的想法就是这样. 博客系统搭建需要使用的技术: 1.基于Spring boot 2 ...