Kafka 简介及基本概念

简介

Kafka 是一个分布式流平台(Apache Kafka® is a distributed streaming platform)

  1. 功能
  • 发布和订阅记录流,类似于消息队列或企业消息系统。
  • 持久化收到的记录流,从而具有容错能力。
  • 及时的处理数据流。
  1. 应用
  • 构建可在系统或应用程序之间可靠获取数据的实时流数据管道,
    即搭建可以使数据在系统或应用之间流动的实时数据流管道(pipelines);
  • 构建转换或响应数据流的实时流应用程序,即搭建可以针对流数据实行实时转换或作出相应反应的数据流应用;
  1. 几个认识
  • Kafka作为一个集群运行在一个或多个可跨多个数据中心的服务器上。
  • Kafka集群以称为主题(Topic)的类别存储记录流。
  • 每条记录由一个键一个值一个时间戳组成。

资料来源:http://kafka.apache.org/intro

在这里插入图片描述

基本概念

1. Zookeeper (注册中心)

zookeeper 一个 分布式协调框架;
管理 Kafka 集群中的 broker 节点;

bin/zookeeper-server-start.sh config/zookeeper.properties

2. Broker (核心节点)

broker ,即 Kafka 服务 部署的一个节点;

一般一个 Kafka 集群( Kafka Cluster )会有多个节点(broker);

bin/kafka-server-start.sh config/server.properties

3. Topic (话题)

主题 是一种分类或发布的一系列记录的名义上的名字;

  1. Partition (分区)

一个 Topic 可以设置为对应多个 Partition (分区),即将该主图的记录拆分成 N 个分区进行保存;

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --partitions 3 --topic [topicName]
如上:定义一个主图(命名 topicName),有 3 个分区;


每个分区是一个有序的不可变的消息序列,新的消息不断追加到这个有组织的有保证的日志上。分区会给每个消息记录分配一个顺序ID号偏移量, 能够唯一地标识该分区中的每个记录。

Kafka 集群保留所有发布的记录,不管这个记录有没有被消费过;Kafka提供可配置的保留策略去删除旧数据(还有一种策略根据分区大小删除数据)。例如,如果将保留策略设置为两天,在记录公布后两天,它可用于消费,之后它将被丢弃以腾出空间。Kafka的性能跟存储的数据量的大小无关, 所以将数据存储很长一段时间是没有问题的。


在这里插入图片描述
事实上,保留在每个消费者元数据中的最基础的数据就是消费者正在处理的当前记录的偏移量(offset)或位置(position)。这种偏移是由消费者控制:通常偏移会随着消费者读取记录线性前进,但事实上,因为其位置是由消费者进行控制,消费者可以在任何它喜欢的位置读取记录。例如,消费者可以恢复到旧的偏移量对过去的数据再加工或者直接跳到最新的记录,并消费从“现在”开始的新的记录。

数据日志的分区,一举数得。
首先,它们允许数据能够扩展到更多的服务器上去。每个单独的分区的大小受到承载它的服务器的限制,但一个话题可能有很多分区,以便它能够支持海量的的数据。
其次,更重要的意义是分区是进行并行处理的基础单元。

资料来源:http://kafka.apache.org/intro#intro_topics

  1. Replication (副本)

一个 Partition 可以设置为对应多个 Replication (副本),即备份数据,具有容灾功能;

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --partitions 3 --replication-factor 2 --topic [topicName]
如上:定义一个主图(命名 topicName),有 2 个 replication;


日志的分区会跨服务器的分布在 Kafka 集群中,每个服务器会共享分区进行数据请求的处理。每个分区可以配置一定数量的副本分区提供容错能力

每个分区都有一个服务器充当“leader”和零个或多个服务器充当“followers”。
leader 处理所有的读取和写入分区的请求,而 followers 被动的从 领导者 那里拷贝数据。
如果 leader 失败了,followers 之一将自动成为新的领导者。
每个服务器可能充当一些分区的leader和其他分区的follower,这样的负载就会在集群内很好的均衡分配。

资料来源:http://kafka.apache.org/intro#intro_topics

  1. Spring 继承 kafka 时 定义主图
    @Bean
    public NewTopic topicName() {
        // 第一个是参数是 topic 名字,第二个参数是分区个数,第三个是 topic 的复制因子个数
        // 当 broker 个数为1个时会创建topic失败,
        // 提示:replication factor: 2 larger than available brokers: 1
        // 只有在集群中才能使用 kafka 的备份功能
        return new NewTopic("topicName", 10, (short) 2);
    }
4. Producer (生产者)

允许应用程序发布记录流至 一个多个 Kafka 的 Topic

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic [topicName]


生产者发布数据到他们所选择的主题。生产者负责选择把记录分配到主题中的哪个分区。这可以使用轮询算法( round-robin)进行简单地平衡负载,也可以根据一些更复杂的语义分区算法(比如基于记录一些键值)来完成。

5. Consumer (消费者)

允许应用程序订阅 一个多个 Topic(主题),并处理这些主题接收到的记录流。

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic [topicName] --from-beginning


消费者以消费群(consumer group)的名称来标识自己,每个发布到主题的消息都会发送给订阅了这个主题的消费群里面的一个消费者的一个实例。消费者的实例可以在单独的进程或单独的机器上。

如果所有的消费者实例都属于相同的消费群,那么记录将有效地被均衡到每个消费者实例。

如果所有的消费者实例有不同的消费群,那么每个消息将被广播到所有的消费者进程。


两个服务器的Kafka集群具有四个分区(P0-P3)和两个消费群。A消费群有两个消费者,B群有四个。

更常见的是,我们会发现主题有少量的消费群,每一个都是“逻辑上的订阅者”。每组都是由很多消费者实例组成,从而实现可扩展性和容错性。这只不过是发布 – 订阅模式的再现,区别是这里的订阅者是一组消费者而不是一个单一的进程的消费者。

Kafka消费群的实现方式是通过分割日志的分区,分给每个Consumer实例,使每个实例在任何时间点的都可以“公平分享”独占的分区。维持消费群中的成员关系的这个过程是通过Kafka动态协议处理。如果新的实例加入该组,他将接管该组的其他成员的一些分区; 如果一个实例死亡,其分区将被分配到剩余的实例。

Kafka只保证一个分区内的消息有序,不能保证一个主题的不同分区之间的消息有序。分区的消息有序与依靠主键进行数据分区的能力相结合足以满足大多数应用的要求。但是,如果你想要保证所有的消息都绝对有序可以只为一个主题分配一个分区,虽然这将意味着每个消费群同时只能有一个消费进程在消费。


高可用
  • 由生产者发送到一个特定的主题分区的消息将被以他们被发送的顺序来追加。也就是说,如果一个消息M1和消息M2都来自同一个生产者,M1先发,那么M1将有一个低于M2的偏移,会更早在日志中出现。
  • 消费者看到的记录排序就是记录被存储在日志中的顺序。
  • 对于副本因子N的主题,我们将承受最多N-1次服务器故障切换而不会损失任何的已经保存的记录。
6. other


Imooc Kafka流处理平台
3-1 kafka基本概念

  • Producer : 消息和数据的生产者,向Kafka的一个Topic发布消息的进程、代码或服务;

  • Consumer : 消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程、代码或服务;

  • Consumer Group : 逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息;

  • Broker : 物理概念,Kafka集群中的每个Kafka节点;

  • Topic : 逻辑概念,Kafka消息的类别,对数据进行区分、隔离;

  • Partition : 物理概念,Kafka下数据存储的基本单位,一个Topic数据会被分散存储在多个Partition中,每个Partition中的消息是有序的;

  • Replication : 同一个Partition可能会有多个Replia,多个Replica之间数据一般是一样的;

  • Replication Leader : 一个Partition的多个Replica上,需要一个Leader负责该Partition上与Producer和Consumer交互;

  • Replication Manager : 负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等。

3-2 概念延伸

Partition

  • 每一个Topic被切分为多个Partitions;
  • 消费者数据少于或等于Partition的数目;
  • Broker Group 中的每一个Broker保存Topic的一个或多个Partitions;
  • Consumer Group 中仅有一个Comsumer读取Topic的一个或多个Partitions,并且是唯一的Consumer;

Replication

  • 当集群中有Broker挂掉的情况,系统可以主动地使Replicas提供服务;
  • 系统默认设置每一个Topic的replication系数为1,可以在创建Topic时单独设置;
  • Replication的基本单位是Topic的Partition;
  • 所有的读和写都在Leader上进行,Followers只是做为备份;

3-3 Kafka消息结构
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值