Kafka(一)初步介绍
2016-04-18 14:46
344 查看
Part 1 Kafka简介
Kafka是一种分布式的,基于发布/订阅的消息系统。它具有以下的特性:
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展。
Part 2 为何要使用kafka作为消息中间件:
(1)解耦:
在项目启动之初来预测将来项目遇到什么需求,是极其困难的。kafka处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程要集成kafka都要实现这一接口。这就允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。例如flume和storm或者hadoop,处理任务不同,只需要相应的修改两边的处理过程,而不需要大量修改kafka内部的代码。
(2)顺序保证
在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个Partition内的消息的有序性。
(3)缓冲
由于数据传入的速度和数据处理的速度不一定同步,因此需要添加一个消息中间件来作为缓冲,比如kafka。
(4)异步通信
很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
Part 3 应用场景:
(1)Messaging
对于一些常规的消息系统,kafka是个不错的选择;partitions/replication和容错,可以使kafka具有良好的扩展性和性能优势。不过到目前为止,我们应该很清楚认识到,kafka并没有提供JMS中的“事务性"“消息传输担保(消息确认机制)""消息分组"等企业级特性;kafka只能使用作为"常规"的消息系统,在一定程度上,尚未确保消息的发送与接收绝对可靠(比如,消息重发,消息发送丢失等)
(2)Websit activity tracking
kafka可以作为”网站活性跟踪“的最佳工具;可以将网页/用户操作等信息发送到kafka中。并实时监控,或者离线统计分析等。
[b]
(3)Log Aggregation
[/b]
kafka的特性决定它非常适合作为"日志收集中心";application可以将操作日志"批量""异步"的发送到kafka集群中,而不是保存在本地或者DB中;kafka可以批量提交消息/压缩消息等,这对producer端而言,几乎感觉不到性能的开支.此时consumer端可以使hadoop等其他系统化的存储和分析系统.
Kafka是一种分布式的,基于发布/订阅的消息系统。它具有以下的特性:
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展。
Part 2 为何要使用kafka作为消息中间件:
(1)解耦:
在项目启动之初来预测将来项目遇到什么需求,是极其困难的。kafka处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程要集成kafka都要实现这一接口。这就允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。例如flume和storm或者hadoop,处理任务不同,只需要相应的修改两边的处理过程,而不需要大量修改kafka内部的代码。
(2)顺序保证
在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个Partition内的消息的有序性。
(3)缓冲
由于数据传入的速度和数据处理的速度不一定同步,因此需要添加一个消息中间件来作为缓冲,比如kafka。
(4)异步通信
很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
Part 3 应用场景:
(1)Messaging
对于一些常规的消息系统,kafka是个不错的选择;partitions/replication和容错,可以使kafka具有良好的扩展性和性能优势。不过到目前为止,我们应该很清楚认识到,kafka并没有提供JMS中的“事务性"“消息传输担保(消息确认机制)""消息分组"等企业级特性;kafka只能使用作为"常规"的消息系统,在一定程度上,尚未确保消息的发送与接收绝对可靠(比如,消息重发,消息发送丢失等)
(2)Websit activity tracking
kafka可以作为”网站活性跟踪“的最佳工具;可以将网页/用户操作等信息发送到kafka中。并实时监控,或者离线统计分析等。
[b]
(3)Log Aggregation
[/b]
kafka的特性决定它非常适合作为"日志收集中心";application可以将操作日志"批量""异步"的发送到kafka集群中,而不是保存在本地或者DB中;kafka可以批量提交消息/压缩消息等,这对producer端而言,几乎感觉不到性能的开支.此时consumer端可以使hadoop等其他系统化的存储和分析系统.
相关文章推荐
- 面试题88:二叉树中结点的最大距离
- ajax.open第三个参数简介
- win7系统开机提示DSDSARK.sys文件损坏无法正常开机的故障原因及解决方法
- 阿里云ubuntu配置安装nginx,配置域名和HTTPS
- mysql Event Scheduler: Failed to open table mysql.event
- Machine learning algorithms-Dlib C++ Library
- jquery 获取标签名(tagName)
- PE 439 【莫比乌斯反演】【杜教筛】
- Hdu 5289-Assignment 贪心,ST表
- struts2中ognl标签具体解释
- MVC学习笔记----缓存
- 在dokcer中安装Phpmyadmin并与mysql容器连接
- mybatis分页插件(物理分页)
- android apk反编译
- cogs 444. [HAOI2010]软件安装
- USB OTG学习
- git操作过程
- 在进程间可公用的全局变量
- phyton3.5 django典型错误
- CMD 模块定义规范