* 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框架基础的更多相关文章

  1. Apache Kafka框架学习

    背景介绍 消息队列的比较 kafka框架介绍 术语解释 文件存储 可靠性保证 高吞吐量实现 负载均衡 应用场景 背景介绍: kafka是由Apache软件基金会维护的一个开源流处理平台,由scala和 ...

  2. 实践部署与使用apache kafka框架技术博文资料汇总

    前一篇Kafka框架设计来自英文原文(Kafka Architecture Design)的翻译及整理文章,非常有借鉴性,本文是从一个企业使用Kafka框架的角度来记录及整理的Kafka框架的技术资料 ...

  3. Flume框架基础

    * Flume框架基础 框架简介: ** Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. ** Flume基于流式架构,容错性 ...

  4. Hibernatel框架基础使用

    Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...

  5. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  6. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  7. 框架基础之Hibernate简介

    框架基础之Hibernate简介 1.什么是Hibernate? Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来 ...

  8. ThinkPHP框架基础

    ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...

  9. Python云端系统开发入门——框架基础

    Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...

随机推荐

  1. poj 2777 Count Color(线段树、状态压缩、位运算)

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38921   Accepted: 11696 Des ...

  2. angular4(2-1)angular脚手架引入第三方类库(jquery)

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 如何在angular4脚手架中引入第三方类库呢比如jquery.swiper.bootstrap...... 例如引入j ...

  3. [poj 2185] Milking Grid 解题报告(KMP+最小循环节)

    题目链接:http://poj.org/problem?id=2185 题目: Description Every morning when they are milked, the Farmer J ...

  4. POJ 1948 DP

    题意:给你n个木棍(n<=40)每个木棍长度<=40,问用上所有的木棍拼成的三角形的面积的最大值,并输出面积*100的值(不四舍五入) 如果没有解,输出-1. 思路: 背包判断可达性. f ...

  5. Linux基础02

    ** Linux基本操作常用命令(二) ** 用户名与主机名 当你进入Linux终端时,你会看到如下样式的图片:     其中[z@z01]方括号内的z表示当前系统登录操作的用户名,@后的z01表示当 ...

  6. (转载) Android两个子线程之间通信

    Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报  分类: 个人杂谈 版权声明:本文为 ...

  7. 51nod 1021 石子归并 (动态规划 简单代码)

    题目: 思路:动态规划,递推式子 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);     dp[i][j]表示 ...

  8. 转Hibernate继承

    hibernate继承映射 以下测试是在mysql中进行的. 1.单表方式 Animal.java @Entity @Inheritance(strategy=InheritanceType.SING ...

  9. 【学习】java下实现调用oracle的存储过程和函数

    在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES --创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRI ...

  10. swift语言点评十四-继承

    Overriding A subclass can provide its own custom implementation of an instance method, type method, ...