消息队列MQ

Kafka 笔记

本文主要是介绍Kafka 笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、什么是kafka?

  Kafka最初由Linkedin 公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper 协调的分布式日志系统,也可以作为MQ消息系统。Linkedin 公司在2010 年贡献给了Apache基金会并成为了顶级开源项目。

  简单一句话,是一款分布式消息发布和订阅系统,它的特点是高性能、高吞吐量。

二、Kafka名词解释

1、Broker
  Kafka集群中包含的服务器,有一个或多个服务器,这种服务器被称为 Broker。

Broker 端不维护数据的消费状态,提升了性能。直接使用磁盘进行存储,线性读写,速度快。避免了在JVM 内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。

2、Producer
  负责发布消息到Kafka Broker

3、Consumer
  负责从Broker 拉取(pull)数据并进行处理。

4、Topic
  每条发布到kafka集群的消息都有一个类别,这个类别被称为Topic。

物理上不同Topic的消息分开存储,逻辑上一个Topic 的消息虽然保存于一个或多个Broker上但是用户只需指定消费的Topic,即刻就可以生产或消费数据而不必关心数据存于何处。

5、Partition
  Partition 是物理上的概念,每个Topic 包含一个或多个Partition。kafka分配的单位是Partition

6、Consumer Group
  每个 Consumer 属于一个特定的 Consumer Group

可为每个 Consumer 指定Group name,若不指定 Group name 则属于默认的 Group

每条消息只可以被 Consumer Goup 组中的一个Consumer消费,但是可以指定多个 Consumer Group

所以一个消息在 Consumer Group 里面只可以被消费一次。已确定!

7、Topic & Partition
  Topic 在逻辑上可以被认为是一个 queue,每发送一条消息必须指定它的Topic,可以简单理解为必须指明把这条消息放入到哪个queue里。

为了使得kafka 的吞吐率可以线性提高,物理上把Topic 分成一个或多个Partition,每个Partition 在物理上对应一个文件夹,该文件夹下存储这个Partition 的所有消息和索引文件。

若创建 Topic1 和Topic2 两个Topic,且分别有13个和19个分区,则整个集群上相应会生成共32个文件夹

三、kafka分布式消息原理

  在Kafka中,Topic 是一个存储消息的逻辑概念,可以认为是一个消息集合。每条消息发送到 Kafka 集群的消息都有一个类别。物理上来锁,不同的topic的消息是分开存储的。

每个Topic 可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息。

 

 

  每个Topic 又可以划分为多个分区(每个Topic至少有一个分区),同一topic 不同分区包含的消息是不同的。每个消息在被添加到分区时,都会被分配一个 offset (偏移量),它是消息在此分区中的唯一编号,kafka 通过offset 保证消息在分区内的顺序,offset 的顺序不跨分区,即kafka 只保证同一个分区内的消息是有序的。

 

这篇关于Kafka 笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!