出处:http://blog.csdn.net/yfkiss/article/details/17348693
1. 引言
互联网够公司的日志无处不在,web日志,js日志,搜索日志,监控日志等等。对于这些日志的离线分析(Hadoop),wget&rsync虽然人力维护成本较高,但可以满足功能行需求。但对于这些日志的实时分析需求(例如实时推荐,监控系统),则往往必须要引入一些“高大上”的系统。
传统的企业消息系统(例如WebSphere)并不是非常适合大规模的日志处理系统,理由如下:
1) 过于关注可靠性,这些可靠性增加了系统实现&API的复杂度,而在日志处理过程中,丢失几条日志常常“无伤大雅”
2) 包括API,scale及消息缓冲的设计理念都不适合Hign Throughput的日志处理系统
针对这些问题,近些年各个公司都做了一些自己的日志收集系统,例如:Facebook的Scribe、Yahoo的data highway,Cloudera的Flume,Apache的Chukwa,百度的BigPipe,阿里的RocketMQ。
Kafka是LinkedIn开发并开源出来的一个高吞吐的分布式消息系统。其具有以下特点:
1) 支持高Throughput的应用
2) scale out:无需停机即可扩展机器
3) 持久化:通过将数据持久化到硬盘以及replication防止数据丢失
4) 支持online和offline的场景。
2. 介绍
kafka使用scala开发,支持多语言客户端(c++、java、python、go等)其架构如下[2]:
Producer:消息发布者
Broker:消息中间件处理结点,一个kafka节点就是一个broker
Consumer:消息订阅者
kafka的消息分几个层次:
1) Topic:一类消息,例如page view日志,click日志等都可以以topic的形式存在,kafka集群能够同时负责多个topic的分发
2) Partition: Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。
3) Message:消息,最小订阅单元
具体流程:
1. Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面
2. kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。
3. Consumer从kafka集群pull数据,并控制获取消息的offset
3. 设计
ThroughPut
High Throughput是kafka需要实现的核心目标之一,为此kafka做了以下一些设计:
1)数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能
2)zero-copy:减少IO操作步骤
3)数据批量发送
4)数据压缩
5)Topic划分为多个partition,提高parallelism
load balance&HA
1) producer根据用户指定的算法,将消息发送到指定的partition
2) 存在多个partiiton,每个partition有自己的replica,每个replica分布在不同的Broker节点上
3) 多个partition需要选取出lead partition,lead partition负责读写,并由zookeeper负责fail over
4) 通过zookeeper管理broker与consumer的动态加入与离开
pull-based system
由于kafka broker会持久化数据,broker没有内存压力,因此,consumer非常适合采取pull的方式消费数据,具有以下几点好处:
1)简化kafka设计
2)consumer根据消费能力自主控制消息拉取速度
3)consumer根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等
Scale Out
当需要增加broker结点时,新增的broker会向zookeeper注册,而producer及consumer会根据注册在zookeeper上的watcher感知这些变化,并及时作出调整。
Reference
[1] Apache Kafka
[2] Kafka: a Distributed Messaging System for Log Processing
[3] Kafka Client
相关推荐
kafka-summarykafka学习总结,源码剖析目录一、基础篇开篇说明概念说明配置说明znode分类kafka协议分类Kafka线程日志存储格式kakfa架构设计二、流程篇1、kafka启动过程2、日志初始化和清理过程3、选举controller过程...
读我kafka学习代码。基础代码:消费者:com.example.kafka.consumer生产者:com.example.kafka.producer其中消费者均为单线程消费,分为手动提交、自动提交两个版本。在生产下,肯定是多消费者(不管是多线程还是多...
- 不懂运行,下载完可以私聊问...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
kafka基础学习ppt(自己整理总结的一些基础知识)
本详细介绍了Kafka基础理论和实践的相关代码,实践步骤,为零基础的想入门大数据行业的人提供了学习相关资料
关亍 kafka 的基本知识,分布式的基础:《分布式消息系统 Kafka 刜步》 kafka 的分布式搭建,quick start:《kafka 分布式环境搭建》 关亍 kafka 的实现细节,返主要就是讲 design 的部分:《细节上》、《细节下》 ...
kafka基础学习教程
Flume+kafka+Storm整合...以下为三个组建整合,这里只做操作也演示结果,原理性方面大家多学习基础。 流程顺序是flume获取telnet数据,将接收到的数据发送至kafak,kafka作为Storm的spout,Storm进行有向无环分析数据。
使用HiveMQ,Apache Kafka和TensorFLow从100000个IoT设备进行大规模流式机器学习如果您只是想开始并在几分钟内快速启动演示,请转到入门以设置基础结构(在GCP上)并运行演示。 您还可以通过现场演示观看20分钟的...
Kafka基础学习总结,从小白学习,基础开始到精通
前端实习生首先掌握1,2,3条基础知识,然后结合所学基础知识根据psd图完成如下静态界面。其中截图的部分只需放置图片即可,如果有想法可以尝试去实现下。(psd在word文档中) 1.所用框架网址: 2.所用UI网址: 3.所需...
第三章 基础操作 3.1 创建topic 3.2 生产消息到Kafka 3.3 从Kafka消费消息 3.4 使用Kafka Tools操作Kafka 第四章 Kafka基准测试 第五章 Java编程操作Kafka 5.1 同步生产消息到Kafka中 5.2 从Kafka的topic中消费消息 ...
1.kafka的基础知识(安装、部署、基础概念,版本) 2.kafka的特性 3. kafka客户端 4.kafka中的zookeeper 5. kafka如何不丢消息 6.kafka多线程消费 7.kafka重组平衡 ...11. 代码见《kafka学习代码》
Kafka基础资料
您将学到什么在数据流涉及的最强大和最通用的技术上打下坚实的基础:Apache Spark和Apache Kafka 为数据流水线管道构建健壮且干净的架构实施正确的工具,使您的数据流体系结构栩栩如生隔离数据流传输管道中涉及的每...
本人在北美刚刚毕业,目前...2.[基础][Kafka2.11]Hadoop生态重要成员Kafka入门学习_5讲(分辨率1280.720)_902M 4Kafka核心技术与实战(更新完毕) 46-Kafka核心技术与实战 Kafka并不难学 Kafka从入门到精通 Kafka核心
Kafka技术实战学习的优选课程,课程内容全程实战,没有拖泥带水,但不包含基础知识的教学,需要同学们先具备一定的Kafka技术基础再进行学习。课程内容包括了Kafka java Consumer实战,Kafka集成框架,Kafka分布式...
# kafka-logsize-exporter ...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
【资源介绍】 毕业设计-基于springboot+kafka的日志处理系统源码.zip毕业设计-基于springboot+kafka的...基础能力强的可以在此基础上修改调整,以实现不同的功能。 欢迎下载,欢迎沟通,互相学习,共同进步!提供答疑!