一、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的存储

1436

被折叠的 条评论
为什么被折叠?



