简述Kafka的生产者、消费者、分区副本机制、存储。。。

一、Producer:生产者,负责往Kafka的Topic中生产数据的。
二、Topic:主题,Kafka中用于区分数据的分类

例如:
用户行为数据的Topic
业务数据的Topic
爬虫数据的Topic
Kafka:类比于数据库存储的,Topic可以理解为表的概念

三、Consumer:消费者,用于从Kafka的Topic中消费数据的,然后进行处理

1、任何一个消费者都可以消费Kafka中的多个主题。
2、任何一个Topic都可以被多个消费者消费。
3、每个消费者消费某个主题,默认都只能消费主题中的数据一次。
4、 Consumer Group:消费者组,一个消费者组中允许有多个消费者,但是一个消费组是一个整体,对于Topic来说,这个整体就是一个消费者。

四、Partition:一个Topic可以有多个分区来实现分布式存储,类似于HBASE中的Region的概念。

1、创建Topic的时候,可以指定这个Topic有几个分区。
2、数据写入Topic,要根据分区规则来写入对应的分区。

拓展:这里我们介绍简单一下Hbase和MapReduce是根据什么规则进入分区的

MapReduce:默认按照Key的hash值取余reduce的个数来决定这条数据进入哪个分区,当然了也可以自定义分区。
Hbase:每个分区都有范围,根据rowkey属于哪个范围进入哪个分区。

五、Replication:分区副本机制,每个分区都可以有多个副本
  • 副本机制:将分区复制多份,每份都是一个分区。
  • 类似于HDFS上的每个数据块可以有多个副本一样。
  • 创建Topic的时候,可以指定分区个数和每个分区的副本个数。
  • 注意事项:
    • 副本本身就是分区,它跟分区是一摸一样的,如果某个正在被使用的分区故障丢失,副本就可以代替丢失的分区
    • 副本的个数不允许超过KafkaServer的个数,最多相等。因为不允许相同分区的两个副本在同一台机器,冗余,并且没有任何作用。
六、Kafka的存储

先思考两个问题:当前每个分区有两个副本,相同分区的副本数据必须一致
1、生产者要写入数据到Topic的分区中,生产者将数据写入哪个副本呢?还是两个都写?

不可能两个都写,如果两个都写了,写的性能非常差,无法实现实时应用

2、消费者要从Topic的分区中读取数据,消费者从这个分区的哪个副本读取?还是都读呢?

不可能两个都读,如果两个都读,性能比较差,读到两份数据,数据重复了。

3、那到底写哪个?读哪个呢?

  • 每个分区的多个副本之间是有主从关系的。
  • 任何一个分区的多个副本
    • 一个主副本:所有生产和消费的读写都是直接操作主副本
    • 其他都是从副本
    • 如果主副本丢失,从副本负责 代替主副本
    • 与主副本同步数据,保证主从副本的数据一模一样

4、 那么分区的数据在分区里是怎样被存储的呢?

Segment:分区段/文件段,就是每个分区中更小的分区,每个分区中数据是存储在分区段中。

  • kafka的数据是以文件的形式存储在硬盘上的。
  • 任何一个segment分区段都会有两个文件,log和index文件,他们是成对出现的。
    • 每一对.log 和.index 就是一个segment段
  • .log:生产者生产的数据,就会存储在这个文件中
  • .index:用于记录所匹配的那个.log文件中的索引信息
    • 用于以后查找数据的时候,需要读取文件查找
    • 可以从index索引中找到要查找的数据在文件的什么位置

最后类比一下和Hbase的存储
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值