• 认真地记录技术中遇到的坑!

kafka学习(第一节)

C/C++ Moxun 2年前 (2018-01-24) 453次浏览 0个评论

以下内容引述自:http://blog.csdn.net/jarvis_fan/article/details/52676221

[toc]1.1kafka是什么
kafka是一个分布式的、基于发布/订阅模式的消息系统(消息中间件、消息队列)。也可以认为它提供了一种分布式、非易失的数据存储策略,它提供了一个可实时处理数据也可离线处理数据的功能。另外,kafka的设计使得它具有水平扩容的能力,当数据量大无法存储时可以增加节点。

[toc]1.2为何使用消息系统
1.解耦,在消息队列的两端提供可供私人定制的接口,这样使用者只需要考虑他自己那一端要怎么处理数据,而不必考虑数据存储策略啊、保存时限啊之类的具体细节。使数据的生产端和消费端不再紧密关联。数据生产者和数据使用者可以独立的修改它们的接口。
2.冗余
(冗余的说法感觉并不合适)一般消息队列使用的范式是“插入-取出-删除”删除之前需要数据的使用者显式通知该数据已被使用完毕,从而使你的数据确保能一直保存到使用完毕。这实际上解决的就是一个数据的易失性问题。
3.扩展性
这个扩展性实际指的是消息出入队列的效率
4.灵活性和峰值处理效率
在访问量剧增的情况下,使用消息队列也能够使关键组件顶住压力(消息是非易失的,但这会不会造成实时性的下降?),但这种流量突发情况是比较少出现的。
5.可恢复性
系统的一些组件失效后不会影响整个系统的工作,加入队列的数据依然可以被恢复后的组件正常处理
6.顺序保证
大部分消息队列中的消息都是排序的,并且可以保证消息按照特定的顺序来处理,kafka保证一个partion内的消息是有序的。
7.缓冲
消息队列提供一个缓冲层来帮助任务高效执行-写入队列的处理尽可能的快。该缓冲有助于控制和优化数据流经过系统的速度(不理解!)
8.异步通信
它允许用户把一个消息放入队列,但是并不立即去处理它,而是在想处理的时候再去处理它。

[toc]1.3常用消息队列(Message Queue)
RabbitMQ 它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。
Redis:Redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃。虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。
Kafka:Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制统一了在线和离线的消息处理。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。

[toc]1.4


转载请注明出处 kafka学习(第一节)
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址