Kafka相关知识学习-基础篇

本文介绍了Kafka的基础知识,包括Kafka的定义、主要术语(如Broker、Topic、Partition和Replication)、Kafka架构,以及Producer和Consumer的工作原理。强调了Kafka作为分布式日志系统和消息中间件的角色,讨论了消息发送确认机制、消费者组和位移管理,特别是Rebalance的概念和触发条件。
摘要由CSDN通过智能技术生成

最近比较清闲,准备学习一下 kafka 相关的原理,沉淀一下。(大部分是借鉴哈)

什么是 Kafka

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka 相关术语

  • Broker: Broker可以视为一个独立的 Kafka 服务节点或 Kafka服务实例,大多数情况下 broker 可被视为是Kafka 集群下的一台服务器 (前提是这台服务器只部署了一个 Kafka实例)。

  • Topic: 发送到Kafka的消息都有一个唯一的类别,称为topic。

  • Partition: Topic的分区,一个分区仅属于一个主题。同一主题下的不同分区包含的信息也不同,同一信息只能存放在一个分区中。

  • Repication: 副本,每个分区都有若干副本,当分区leader宕机时,会从分区副本中选择一个成为新的leader

  • Producer: 消息的生产者。

  • Consumer: 消息的消费者,消费者连接至 Kafka 并接受消息。

  • Controller: 也是一个broker,除了具有基本broker的功能外,还负责分区选举和故障切换

  • ISR(In Sync Replica): 每个分区包含一个ISR列表,里面都是和master数据保持一致的副本(包括master)

Kafka架构

(待补图)

  • producer 可以直接与 broker 通信,broker中存有元数据信息(broker的数量,各个topic的分区个数,各分区的master位置等),通过这种方式避免 product 与 zookeeper 的通信,降低 zookeeper 的负担。
  • 每个broker 都与 zookeeper 直接通信
  • consumer 也直接与 broker 通信

Topic逻辑结构

在这里插入图片描述

  • 生产者 push 的消息会被顺序追加到各个分区日志文件的尾部。
  • 消费者在进行信息读取时,会从低位开始消费,消费规则符合FIFO。
  • 不同的主题分区(Partition)能够被分配到不同的 broker上, 因此一个主题能够分散的部署到多个broker上,提高存储效率。
  • 每一个 Partition 都可以设置消息的有效期,到期后,无论消息是否被消费都将会被清理。(对于传统的MQ而言,一般会删除已经被消费的数据,但 Kafka 会保留所有写入消息,但很明显由于磁盘的限制,数据不可能被永久保留,Kafka对删除旧数据提供了两种策略,基于时间以及基于文件大小。
  • 当消息被存储入 Partition 后,会被指定一个 offset 来记录该消息的位置,该 offset 在分区中递增。

Producer 生产者

消息数据结构

public class ProducerRecord<K, V> {
   
    private final String topic; //消息所属topic
    private final Integer partition; //消息所属分区
    private final Headers headers; //消息头
    private final K key;  //如果partition没指定且key存在,kafka会根据key来计算partition
    private final V value; //消息体
    private final Long timestamp; //时间戳
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值