kafka学习文档(Kafka基本概念、Kafka内部逻辑组成)

kafka学习文档

【有问题或错误,请私信我将及时改正;借鉴文章标明出处,谢谢】

kafka命令操作,看我博客
kafka集群搭建,看我博客

一、Kafka基本概念

1.Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。

2.Kafka是一个可持久化的分布式的消息队列

3.Kafka和Flume的比较
Kafka是一个通用的系统。它可以有多个生产者和多个消费者共享多个主题(topic)。
Flume被设计为往HDFS, HBase发送数据,它对HDFS有特殊的优化。
如果数据被设计给 Hadoop使用,使用 Flume。如果在流式处理系统当中,如Storm,Spark Streaming,可以使用kafka。

二、kafka内部逻辑组成

1.名词解释

1)Producer :消息生产者,就是向kafka broker 发消息的客户端;

2)Consumer :消息消费者,向kafka broker 取消息的客户端;

3)Consumer Group (CG):消费者组,由多个consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

4)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic;

6)Partition:为了实现扩展性,一个非常大的topic 可以分布到多个broker(即服务器)上,一个topic 可以分为多个partition,每个partition 是一个有序的队列;

7)Replication:副本,为保证集群中的某个节点发生故障时,该节点上的partition 数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。

8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。

9)follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。

2.Kafka的消息存储和生产消费模型

(1)一个topic分成多个partition。

(2)每个partition内部消息强有序,其中的每个消息都有一个序号叫offset。

(3)一个partition只对应一个broker,一个broker可以管多个partition。

(4)根据时间策略删除,而不是消费完就删除。

(5)producer自己决定往哪个partition写消息,可以是轮询的负载均衡或者是基于hash的partition策略。

3.Kafka的消息构成

(1)kafka里面的消息是有topic来组织的,简单的我们可以想象为一个队列,一个队列就是一个 topic,然后它把每个topic又分为很多个partition,这个是为了做并行的,在每个partition里面是有序的,相当于有序的队列,其中每个消息都有个序号,比如0到12,从前面读往后面写。。

(2)一个partition对应一个broker,一个broker可以管理多个 partition,这个partition可以很简单想象为一个文件,当数据发过来的时候它就往这个partition上面append,迫加就行,kafka和很多消息系统不一样,很多消息系统是消费完了我就把它删掉,而kafka是根据时间策略删除,而不是消费完就删除,在kafka里面没有个消费完这么个概念,只有过期这样一个概念

(3)consumer自己维护消费到哪个 offset每个 consumer都有对应的 group group内是 queue消费模型各个 consume消费不同的 partition一个消息在 group内只消费一次group间是 publish- subscribe消费模型各个 group各自独立消费,互不影响。

(4)consumer自己维护消费到哪个offset。
每个consumer都有对应的group。
group内是queue消费模型。
各个consume消费不同的partition。
一个消息在 group内只消费一次。
group间是 publish- subscribe消费模型。
各个group各自独立消费,互不影响。

【有问题或错误,请私信我将及时改正;借鉴文章标明出处,谢谢】

你可能感兴趣的:(大数据)