第4章 Kafka
一、原理
- kafka的数据存储在log里面,数据往文件后面不断追加,追加的速度更快,如果是随机访问反而效率低
- log里面都是有序的事件,每个事件都有位移,偏移量
- 当然有很多个消费者,把消费者分成不同的组。当一个消息被所有的消费者读走了之后,这个消息才会被删除掉。
- 这样就能保证log文件不可能无限制的增长。
二、数据类型
- Topic里面存储的都是同构的数据类型,数据类型统一(访问效率高,推导出偏移量为X的时候直接就可以推出)
- Topic里面存储的都是异构的数据类型,数据类型不一样(访问效率低,不好推出某个偏移量的消息)
- Topic可能会分成几个Partition,假设某个Topic非常大,就可以分区。最终会使用某种hash算法,kafka自己会决定放到哪一个具体的区域里面。
- 分的区域越多,管理的复杂性增加,但是并行处理,也增加了处理的效率。
- 卡夫卡的消息(event)是一个带有时间戳的key-value对,他会记录一些发生的事情。key可以作为分类的依据,value最好不要作为分类的依据。此外,key也不是必须的,value
三、集群的容灾
- 用空间换可靠性,比如每个数据存储两个副本,这样比如有一个卡夫卡服务器崩溃了,还有一个备份能够使用
- 需要一个协调器在卡夫卡集群里面,比如有多个消费者订阅了集群的topic,他们都在处理topic里面的内容。consume会不断的给协调器发心跳包,表明自己正在处理,如果某个consumer不发了说明故障了,协调器就不会把消息发给故障的。