大数据技术学习——Kafka

举报
slx_share 发表于 2023/02/27 14:34:28 2023/02/27
【摘要】 Kafka是分布式消息队列,可充当缓存数据库。

1       一句话介绍

Kafka是分布式消息队列,可充当缓存数据库。

2       基本概念

  • Broker:集群中每台服务器称为一个Broker
  • Producer:发布消息到某个Topic的生产者。
  • Consumer:从某个Topic读取消息的消费者,每个消费者实例对应一个进程或线程。
  • Consumer Group:每个消费者归属于一个特定的消费者组。
  • Message:消息,每个分区内的消息都是有序排列的,且有一个有序的id(即偏移量,offset)唯一确定消息在分区中的位置。
  • Topic:消息主题,即消息的类别。
  • Partition:分区是一个有序且不可变的消息队列。一个Topic的消息会切分成多个Partition分布到不同的Broker上。生产者和消费者可并发访问多个PartitionPartition可广播到多个消费者组,即每个消费者组可获取全量消息。但是针对同一Partition,同一时刻消费者组里仅一个消费者实例消费消息。

  • Replica:可以为Parition设置副本数。
    • Leader:主副本,负责Partition读写操作。
    • Follower:从副本,从Leader同步数据,不参与读写,仅当Leader故障时替补。
  • Segment:每个Partition分成多个小文件段,便于及时清理已经消费完的段,每个段由indexlog文件构成。
  • Offset:偏移量,消费者组通过TopicPartitionOffset,记录消费消息的位置。

3       Kafka数据结构


Partition在物理上是一个文件夹,Partition大文件会分成多个小文件段,便于定期清除已消费的消息。

每个段文件对应消息文件(.log)以及索引文件(.index),两者一一对应。


  • 通过索引文件可快速定位消息的位置。
  • 索引文件稀疏存储。例如:针对100条消息,只存储120406080条消息的位置,如果要查找第23条数据,则直接在index中找到20的位置,再偏移3条即可。

Kafka中的消息结构如下图所示:


  • 无论消息是否被消费,Kafka均会保留所有的消息。
  • Kafka提供“delete”和“compact”两种删除消息的方式。compact指压缩消息,仅保留每个Key对应的最新Value,如下:


4       Kafka读写流程

  • 写流程(Push)

Producer连接任意存活的Broker,获取TopicPartitionLeader元数据信息,然后直接与Leader所在Broker连接,发布消息。Producer还可以制定分区函数,根据Key将消息发往特定的Partition


  • 读流程(Pull)

消费者组内消费者直接连接Topic PartitionLeader所在Broker,主动拉取数据。同一消费者组内消费者可并发消费不同Partition的消息,可扩展消费者组内消费者数量增加消费速率。

  • 消息传输机制

生产者推送消息有三种方式:

  • acks = 0producer不会等待broker发送ack ,因为发送消息网络超时或broker crash(例如PartitionLeader还没有commit消息,LeaderFollower数据不同步),既有可能丢失也可能会重发。
  • acks = 1:当leader接收到消息之后发送ack,丢会重发,丢的概率很小。
  • acks = -1:当n个(ninsync.replicas参数决定)follower同步消息成功后再发送ack,但凡有一个副本存活消息就不会丢失,可靠性极高。

5       参考


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。