您的位置:首页 > 其它

kafka设计原理(转)

2017-06-20 14:27 190 查看

一、kafka简介

1.1 背景历史

当今社会各种应用系统,诸如商业、社交、搜索、浏览等信息工厂一样不断被生产出各种信息,在大数据时代,我们面临如下几个挑战:

如何收集这些巨大的信息

如何分析它

如何及时做到如上两点
以上几个挑战形成了一个业务需求模型,即生产者生产各种信息,消费者消费 处理分析 这些信息,而在生产者与消费者之间,需要一个沟通两者的桥梁-消息系统。从一个微观层面来说,这种需求也可以理解为不同的系统之间如何传递消息

1.2 Kafka诞生

kafla 它就是解决上述问题的一个框架,它实现了生产者和消费者之间的无缝连接
kafka 是高产出的分布式消息系统

1.3 kafka现在

Apache kafka是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。被广泛用于Hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎。

Kafka技术概览

2.1 Kafka的特性

高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒

可扩展性:支持集群

持久性、可靠性:消息最终会被持久化到本地磁盘,并且支持数据备份防止丢失

容错性:允许集群中节点失败 若副本数量为n,则允许n-1

高并发:支持数千个客户端同时读写

2.2 Kafka一些重要设计思想

Consumergroup(消费者) 各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果一个消息可以被多个consume消费的话,那么这些consumer必须在不同的组。

消息状态 在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。

消息持久化 Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。一次性push多个message 减少IO调用次数

批量发送:Kafka支持以消息集合为单位进行批量发送,以提高push效率。

push-and-pull : Kafka中的Producer和consumer采用的是push-and-pull模式,即Producer只管向broker push消息,consumer只管从broker pull消息,两者对消息的生产和消费是异步的。

Kafka集群中broker之间的关系:不是主从关系,各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点

负载均衡方面:Kafka提供了一个 metadata API来管理broker之间的负载(对Kafka0.8.x而言,对于0.7.x主要靠zookeeper来实现负载均衡)。

同步异步:Producer采用异步push方式,极大提高Kafka系统的吞吐率(可以通过参数控制是采用同步还是异步方式)。

分区机制partition:Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。分区的意义很重大,后面的内容会逐渐体现。

离线数据装载:Kafka由于对可拓展的数据持久化的支持,它也非常适合向Hadoop或者数据仓库中进行数据装载。

插件支持:现在不少活跃的社区已经开发出不少插件来拓展Kafka的功能,如用来配合Storm、Hadoop、flume相关的插件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: