kafka简介

一、kafka的应用场景

在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转。Kafka承担高速数据总线的作用。

二、kafka基本概念

topic(主题):每一类消息称之为一个topic;

producer:生产者;

consumer:消费者;

broker(代理):已发布的消息保存在一组服务器中,称之为kafka集群。集群中每一个服务器就是一个broker。消费者可以订阅一个或多个topic,并从broker拉取数据;

partition(分区):topic下可以有多个分区,每个partition都是一个顺序的、不可变的消息队列,并且可以持续的添加;

该设计可以不受单台服务器的限制处理更多的数据,且能实现数据的并行处理。

每个分区有一个leader以及零或多个follower,leader处理此分区的所有的读写请求,而follower被动的复制数据。如果leader宕机,其他的一个follower会被选举为新的leader。一台服务器可以是一个分区的leader,另一个分区的follower。

三、kafka原理

producer:

生产者往某个topic上发布消息,它可以选择分区(默认是在分区列表中循环)

consumer:

消息模型分两种:队列模型、发布/订阅模型。队列模型中所有消费者去队列中获取数据,但一条消息只有一个消费者能获取到;发布/订阅模型中消息被广播到所有消费者,收到消息的消费者都可以处理数据。

kafka提供了一个概念叫consumer group(消费者组),消息被分发给consumer group中的一个consumer。假如所有消费者在一个组里面就是队列模型,如果消费者都在不同组里面就是发布/订阅模型。这样设计比较灵活。

kafka集群保持所有的消息,直到它们过期,无论消息是否被消费了。实际上消费者持有的元数据是偏移量,且这个偏移量由消费者控制;

四、kafka的优势

1.顺序保障性:

传统的消息系统按顺序保存数据,如果多个消费者从队列消费,则服务器按存储的顺序发送消息,但是,尽管服务器按顺序发送,消息异步传递到消费者,因此消息可能乱序到达消费者。这意味着消息存在并行消费的情况,顺序就无法保证。消息系统常常通过仅设1个消费者来解决这个问题,但是这意味着没用到并行处理。

kafka做的更好。通过并行topic的parition —— kafka提供了顺序保证和负载均衡。每个partition仅由同一个消费者组中的一个消费者消费到。并确保消费者是该partition的唯一消费者,并按顺序消费数据。每个topic有多个分区,则需要对多个消费者做负载均衡。

请注意,相同的消费者组中不能有比分区更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。consumer组内的成员平分消息,如果你有3个分区,A消费组有4个消费者,那么将有一个消费者永远拿不到消息。 每个分区都是顺序的,但是因为你的消费者程序处理消息的速度不一样,所以最终无法保证顺序,如果你想保证顺序,那只能1个分区。

2.可靠性:

如果一个Topic配置了复制因子(replication factor)为N, 那么可以允许N-1服务器宕机而不丢失任何已经提交(committed)的消息。

3.实时的流处理

该部分待补充。。。

    原文作者:袁硕
    原文地址: https://zhuanlan.zhihu.com/p/59857119
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞