1、什么是kafka
kafka主要是针对于实时消息处理,目标是实现一个为处理实时数据提供一个统一、高吞吐、低延迟的平台。是分布式发布-订阅消息系统,是一个分布式的,可划分的,冗余备份的持久性的日志服务。
Kafka现在是Apache的开源项目之一,但是最初的研发,是由Linkedin公司开发的,主要是针对于日志收集和消息收集等场景下的分布式消息系统。
2、kafka原理
在Kafka中通过Producer向topic发送消息,从topic获取数据者称为Consumer,Consumer被定义到一个Consumer Group中,整个Kafka集群通过Zookeeper进行协调
3、基本概念
1、kafka作为集群运行在一个或者多个服务器上
2、kafka集群存储的消息是以topic为类别记录的
3、kafka存储的消息是k-v键值对,k是offset偏移量,v就是消息的内容
4、topic:kafka将消息分门别类,每一类的消息称之为topic
5、broker:已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。
6、消息:kafka会保存消息直到它过期,无论是否被消费了。
7、Producer:发布消息的对象,在Kafka中向topic发送消息者,也负责选择发布到topic中的哪个分区
8、Consumer:订阅消息并处理发布的消息的对象,从topic获取数据者
9、patition:topic是逻辑上的概念,patition是物理概念。Kafka 中每个分区是一个有序的,不可变的消息序列,新的消息不断追加到 partition 的末尾,这个就是按顺序写入磁盘
4、Kafka存储原理
Topic的每个Partition副本对应一个物理上的目录,存储当前Partition数据,Partition中的数据以Segment为单位存储,每个segment存储一段数据。
Kafka为了提高读取效率,为每个segment创建一个两个索引文件,一个以消息偏移量为依据,以.index结尾,以偏移量为名称,另一个是以消息被写入的时间戳为依据,以.timeindex结尾,以时间偏移量为名称。偏移量索引文件中稀疏存储来偏移量既索引位置,而时间索引文件中存储来时间戳偏移量和索引位置,这样可以以logn的时间复杂度快速定位到segment中的数据。
偏移量索引文件
1)以偏移量作为名称,index作为后缀
2)索引内容格式:offset,position
3)采用稀疏的存储方式
4)通过log.index.interval.bytes设置索引跨度
时间错索引文件
1)以时间戳作为名称,以timeindex为后缀
2)索引内容格式:timestame,offset
3)采用稀疏存储方式
4)通过log.index.interval.bytes设置索引跨度
5、linux环境下kafka查询和写入:
kafka查询数据:\
/wls/kafka_2.10_0.8.2.2/bin/kafka-console-consumer.sh --zookeeper 30.4.21.168:2181,30.4.21.162:2181,30.4.21.233:2181 --topic --from-beginning | grep "过滤字符串"
往kafka写入数据:
/wls/kafka_2.10_0.8.2.2/bin/kafka-console-producer.sh --broker -list 30.4.19.23:9092,30.4.16.59:9092 --topic