140 likes | 701 Views
Kafka 基础知识. Kafka 基础知识. 产生背景 设计理念 部署架构 基本概念 关键技术. Kafka 基础知识. 产生背景 传统的日志分析系统提供了一种离线处理日志信息的可扩展方案,但若要进行实时处理,通常会有较大延迟。而现有的消(队列)系统能够很好的处理实时或者近似 实时的应用,但未处理的数据通常不会写到磁盘上,这对于 Hadoop 之类(一小时或者一天只处理一部分数据)的离线应用而言,可能存在问题。 Kafka 正 是为了解决以上问题而设计的,它能够很好地离线和在线应用。. Kafka 基础知识. 设计理念
E N D
Kafka基础知识 • 产生背景 • 设计理念 • 部署架构 • 基本概念 • 关键技术
Kafka基础知识 • 产生背景 传统的日志分析系统提供了一种离线处理日志信息的可扩展方案,但若要进行实时处理,通常会有较大延迟。而现有的消(队列)系统能够很好的处理实时或者近似 实时的应用,但未处理的数据通常不会写到磁盘上,这对于Hadoop之类(一小时或者一天只处理一部分数据)的离线应用而言,可能存在问题。Kafka正 是为了解决以上问题而设计的,它能够很好地离线和在线应用。
Kafka基础知识 • 设计理念 • (1)数据在磁盘上存取代价为O(1)。一般数据在磁盘上是使用BTree存储的,存取代价为O(lgn)。 • (2)高吞吐率。即使在普通的节点上每秒钟也能处理成百上千的message。 • (3)显式分布式,即所有的producer、broker和consumer都会有多个,均为分布式的。 • (4)支持数据并行加载到Hadoop中。
Kafka基础知识 • 设计理念-另一种说法 • 1、关注大吞吐量,而不是别的特性 • 2、针对实时性场景 • 3、关于消息被处理的状态是在consumer端维护,而不是由kafka server端维护。 • 4、分布式,producer、broker和consumer都分布于多台机器上。
Kafka基础知识 • 部署架构 Kakfa是显式分布式架构,producer、broker(Kafka)和consumer都可以有多个。
Kafka基础知识 • 基本概念 • 几个术语 (1)message(消息)是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息。如果consumer订阅了这个主题,那么新发布的消息就会广播给这些consumer。 (2)Kafka是显式分布式的,多个producer、consumer和broker可以运行在一个大的集群上,作为一个逻辑整体对外提供服务。对于 consumer,多个consumer可以组成一个group,这个message只能传输给某个group中的某一个consumer. (3)topic:在kafka中,不同的数据可以按照不同的topic存储。
Kafka基础知识 • 基本概念 • 依赖技术 (1)硬件上,kafka利用线性存储来进行硬盘直接读写。 (2)kafka没有使用内存作为缓存。 (3)用zero-copy。 (4)Gzip和Snappy压缩 (5)kafka对事务处理比较弱,但是message分发上还是做了一定的策略来保证数据递送的准确性的。
Kafka基础知识 • 基本概念 • 关于存储的几个概念 (1)Partition:同一个topic下可以设置多个partition,目的是为了提高并行处理的能力。可以将同一个topic下的message存储到不同的paritition下。 (2)Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。
Kafka基础知识 • 基本概念 • 分布式方面 (1)broker的部署是没有主从结构的,每个节点都是同等的,节点的增减和减少都不需要改变任何配置。 (2)producer和consumer通过zookeeper去发现topic,并通过zookeeper来协调生产和消费的过程。 (3)producer、consumer和broker均采用TCP连接,通信基于NIO实现。并且Producer和consumer能自动检测broker的增加和减少。
Kafka基础知识 • 关键技术 • zero-copy 在Kafka上,有两个原因可能导致低效:1)太多的网络请求 2)过多的字节拷贝。为了提高效率,Kafka把message分成一组一组的,每次请求会把一组message发给相应的consumer。 此外, 为了减少字节拷贝,采用了sendfile系统调用。 http://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy2/
Kafka基础知识 • 关键技术 • Exactly once message transfer 怎样记录每个consumer处理的信息的状态?在Kafka中仅保存了每个consumer已经处理数据的offset。这样有两个好处:1)保存的数据量少 2)当consumer出错时,重新启动consumer处理数据时,只需从最近的offset开始处理数据即可。
Kafka基础知识 • 关键技术 • Push/pull Producer 向Kafka(push)推数据,consumer 从kafka拉(pull)数据。
Kafka基础知识 • 关键技术 • 负载均衡和容错 Producer和broker之间没有负载均衡机制。broker和consumer之间利用zookeeper进行负载均衡。所有broker和consumer都会在zookeeper中进行注册,且 zookeeper会保存他们的一些元数据信息。如果某个broker和consumer发生了变化,所有其他的broker和consumer都会得到 通知。