大数据技术学习——Kafka
【摘要】 Kafka是分布式消息队列,可充当缓存数据库。
1 一句话介绍
Kafka是分布式消息队列,可充当缓存数据库。
2 基本概念
- Broker:集群中每台服务器称为一个Broker。
- Producer:发布消息到某个Topic的生产者。
- Consumer:从某个Topic读取消息的消费者,每个消费者实例对应一个进程或线程。
- Consumer Group:每个消费者归属于一个特定的消费者组。
- Message:消息,每个分区内的消息都是有序排列的,且有一个有序的id号(即偏移量,offset)唯一确定消息在分区中的位置。
- Topic:消息主题,即消息的类别。
- Partition:分区是一个有序且不可变的消息队列。一个Topic的消息会切分成多个Partition分布到不同的Broker上。生产者和消费者可并发访问多个Partition。Partition可广播到多个消费者组,即每个消费者组可获取全量消息。但是针对同一Partition,同一时刻消费者组里仅一个消费者实例消费消息。
- Replica:可以为Parition设置副本数。
- Leader:主副本,负责Partition读写操作。
- Follower:从副本,从Leader同步数据,不参与读写,仅当Leader故障时替补。
- Segment:每个Partition分成多个小文件段,便于及时清理已经消费完的段,每个段由index和log文件构成。
- Offset:偏移量,消费者组通过Topic、Partition及Offset,记录消费消息的位置。
3 Kafka数据结构
Partition在物理上是一个文件夹,Partition大文件会分成多个小文件段,便于定期清除已消费的消息。
每个段文件对应消息文件(.log)以及索引文件(.index),两者一一对应。
- 通过索引文件可快速定位消息的位置。
- 索引文件稀疏存储。例如:针对100条消息,只存储1、20、40、60、80条消息的位置,如果要查找第23条数据,则直接在index中找到20的位置,再偏移3条即可。
Kafka中的消息结构如下图所示:
- 无论消息是否被消费,Kafka均会保留所有的消息。
- Kafka提供“delete”和“compact”两种删除消息的方式。compact指压缩消息,仅保留每个Key对应的最新Value,如下:
4 Kafka读写流程
- 写流程(Push)
Producer连接任意存活的Broker,获取Topic、Partition的Leader元数据信息,然后直接与Leader所在Broker连接,发布消息。Producer还可以制定分区函数,根据Key将消息发往特定的Partition。
- 读流程(Pull)
消费者组内消费者直接连接Topic Partition的Leader所在Broker,主动拉取数据。同一消费者组内消费者可并发消费不同Partition的消息,可扩展消费者组内消费者数量增加消费速率。
- 消息传输机制
生产者推送消息有三种方式:
- acks = 0:producer不会等待broker发送ack ,因为发送消息网络超时或broker crash(例如Partition的Leader还没有commit消息,Leader与Follower数据不同步),既有可能丢失也可能会重发。
- acks = 1:当leader接收到消息之后发送ack,丢会重发,丢的概率很小。
- acks = -1:当n个(n由insync.replicas参数决定)follower同步消息成功后再发送ack,但凡有一个副本存活消息就不会丢失,可靠性极高。
5 参考
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)