Kafka原理讲解

Posted 程序员食堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka原理讲解相关的知识,希望对你有一定的参考价值。



Kafka

Kafka原理讲解(一)



11 .1 Kafka的特性


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

·可扩展性:kafka集群支持热扩展

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

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

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

21.2 Kafka一些重要设计思想


下面介绍先大体介绍一下Kafka的主要设计思想,可以让相关人员在短时间内了解到kafka相关特性,如果想深入研究,后面会对其中每一个特性都做详细介绍。


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

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

Kafka原理讲解(一)


· 消息持久化:Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。


· 消息有效期:Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其中很多细节是可配置的。


· 批量发送: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相关的插件。

31.3 kafka 应用场景


  1. 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

  2. 消息系统:解耦和生产者和消费者、缓存消息等。

  3. 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

  4. 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

  5. 流式处理:比如spark streaming和storm

  6. 事件源

41.4 Kafka架构组件


    Kafka中发布订阅的对象是topic。我们可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer,从topic订阅消息的客户端称作consumer。Producers和consumers可以同时从多个topic读写数据。一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。


Kafka原理讲解(一)

· topic:消息存放的目录即主题

· Producer:生产消息到topic的一方

· Consumer:订阅topic消费消息的一方

· Broker:Kafka的服务实例就是一个broker

Kafka原理讲解(一)


Kafka原理讲解(一)

51.5 Kafka Topic&Partition


    消息发送时都被发送到一个topic,其本质就是一个目录,而topic由是由一些Partition Logs(分区日志)组成,其组织结构如下图所示:

Kafka原理讲解(一)

    我们可以看到,每个Partition中的消息都是有序的,生产的消息被不断追加到Partition log上,其中的每一个消息都被赋予了一个唯一的offset值。


    Kafka集群会保存所有的消息,不管消息有没有被消费;我们可以设定消息的过期时间,只有过期的数据才会被自动清除以释放磁盘空间。比如我们设置消息过期时间为2天,那么这2天内的所有消息都会被保存到集群中,数据只有超过了两天才会被清除。


    Kafka需要维持的元数据只有一个–消费消息在Partition中的offset值,Consumer每消费一个消息,offset就会加1。其实消息的状态完全是由Consumer控制的,Consumer可以跟踪和重设这个offset值,这样的话Consumer就可以读取任意位置的消息。


    把消息日志以Partition的形式存放有多重考虑,第一,方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;第二就是可以提高并发,因为可以以Partition为单位读写了。

Kafka 核心组件2.1 Replications、Partitions 和Leaders


    通过上面介绍的我们可以知道,kafka中的数据是持久化的并且能够容错的。Kafka允许用户为每个topic设置副本数量,副本数量决定了有几个broker来存放写入的数据。如果你的副本数量设置为3,那么一份数据就会被存放在3台不同的机器上,那么就允许有2个机器失败。一般推荐副本数量至少为2,这样就可以保证增减、重启机器时不会影响到数据消费。如果对数据持久化有更高的要求,可以把副本数量设置为3或者更多。


    Kafka中的topic是以partition的形式存放的,每一个topic都可以设置它的partition数量,Partition的数量决定了组成topic的log的数量。Producer在生产数据时,会按照一定规则(这个规则是可以自定义的)把消息发布到topic的各个partition中。上面将的副本都是以partition为单位的,不过只有一个partition的副本会被选举成leader作为读写用。


    关于如何设置partition值需要考虑的因素。一个partition只能被一个消费者消费(一个消费者可以同时消费多个partition),因此,如果设置的partition的数量小于consumer的数量,就会有消费者消费不到数据。所以,推荐partition的数量一定要大于同时运行的consumer的数量。另外一方面,建议partition的数量大于集群broker的数量,这样leader partition就可以均匀的分布在各个broker中,最终使得集群负载均衡。在Cloudera,每个topic都有上百个partition。需要注意的是,kafka需要为每个partition分配一些内存来缓存消息数据,如果partition数量越大,就要为kafka分配更大的heap space。

面试题分享

blibli一面  前端开发

开始:10:34    37分钟

1.自我介绍

2.对算法和数据结构的了解,问了排序算法,

说了选择,插入,快排,冒泡的思想和复杂度

3.问了在学校学的课程

4.问了简单的less和Sass

5.git的版本控制的怎么实现,还有一些简单的指令

6.css盒模型,以及怎样切换

7.html5的新增标签

8.ES6变量定义   var和let的区别

9.用flex实现三栏布局,说了实现方法,还有其他方法吗  说了浮动的实现

10.JQuery的链式实现原理

11.vue的原理   

12.原生js对DOM的操作

13.settimeout和setinterval的区别

14.递归调用settimeout和setinterval的实现区别

15.同源策略以及跨域   

16.你还有什么要问的?


Kafka原理讲解(一)

放弃谁都可以,千万不要放弃自己!

Kafka原理讲解(一)
Kafka原理讲解(一)

WE WISH YOU HAPPY

NEW YEAR

2018

Kafka原理讲解(一)

以上是关于Kafka原理讲解的主要内容,如果未能解决你的问题,请参考以下文章

原理实践,全面讲解Logstash+Kibana+kafka

Kafka原理篇:图解kafka架构原理

kafka手动提交offset,原理+实战讲解

腾讯资深架构师给你讲解 kafka的基本原理,带你实战实践

Kafka实战-底层原理分析(下)

Kafka实战-底层原理分析(下)