Kafka学习-系列一

来源:互联网 发布:中国流行音乐发展知乎 编辑:程序博客网 时间:2024/06/06 11:03

本文章只是记录我在学习kafka中的一些心得。文章转载自http://www.infoq.com/cn/articles/kafka-analysis-part-1


一.分布式消息系统,由Linkedin开发,可扩展性大,吞吐率高。与Spark集成。

二、应用背景:网站活动流数据(PV,UV)等成为网站报表分析中重要的部分。活动流数据的处理方式是,将操作日志记录在某些文件中,然后周期性的对文件进行处理。运营数据是指分析服务器的各种性能指标数据:如CPU,IO使用率、服务器日志

Kafka为活动、运营数据处理提供了基础层的支持


三、kafka简介:分布式的、基于发布/订阅的消息系统,

目标:高吞吐率,普通机器也能保证单机每秒100k以上的消息传输;以时间复杂度的o(1)方式保证性能,对TB以上的数据也能保证常数时间复杂度的性能;支持离线数据、实时数据处理;支持kafka server的消息分区


四、使用消息系统的好处:


关键词:


解耦:两边各加入一个基于数据的隐藏的接口,功能添加时只要遵循同一个接口约束就行

冗余:数据的可持久化,数据被处理之前都是可持久化的

可扩展性:需要添加新的处理进程时,不需要对之前的逻辑进行改动

峰值处理能力以及灵活性:


可恢复性:一个处理消息的进程挂掉,系统恢复之后该消息仍能够被处理


缓冲:缓冲机制,提高效率

顺序保证:partition的有序性

异步通讯:消息的异步处理机制


五、消息队列(MQ)


ActiveMQ && Kafka :Apache 下的一个子项目,


ZeroMQ:最快的消息系统,但是不支持数据持久化,一旦宕机,出现数据丢失


RabbitMQ:重量级,适合用于企业级的应用。出队效率远低于Redis


六、Kafka架构


Terminology:名词解释


broker:kafka集群中的服务器


producer:发布消息到broker


consumer:从broker读取消息的客户端


topic:每一个消息都有一个topic,不同的topic的存储位置不同


partition:物理上的概念,分区


1.topic && partition


topic 相当于 queue,可以有多个partition,即文件夹


消息被顺序写入磁盘文件,保证了高效性。


磁盘索引,offset,每个partition又被分为多个segment。


broker是无序的,不记录哪个信息被消费了。因为Consumer Group会记录当前消费信息的offset 。也可以重置offset来重新消费消息。对于消费过的消息kafka会保留,可以在配置文件中选取某种旧消息清除方式


q:consumer group的消息存储在哪? broker内的磁盘文件吗?

每一个topic partition中会有相应Consumer Group的信息?


2.Producer消息路由


producer发送消息给broker(Producer.send()),用户可自定义Partition机制,继承Partitioner接口,重写partition函数


Partition的值从0开始


3.Consumer Group

不同的Consumer Group可以接受相同的消息,但是一个Group只有一个consumer处理消息


Storm实时消息流处理,Hadoop支持离线消息处理

4.Pull vs Push


push:消息传输速率由Broker决定,目标是使用最大传输速率,但是Consumer可能来不及处理消息,出现拒绝服务或者网络拥塞的情况


pull模式:Consumer可自主控制消费速率与消费模式,


delivery guarantee


at most once :只传输一次,可能会丢失(先commit再处理,若consumer crash ,未处理的则不会再被处理)


at least once:默认。可能传输多次,保证不会丢失。(先处理再commit,若发生crash,则已处理的会被再次处理)


Exactly once :只传输一次,只处理一次,保证不会丢失。利用kafka的offset设置,两阶段提交。在low level API中将offset存入HDFS(Hadoop distribute file system,Hadoop分布式文件系统)


0 0
原创粉丝点击