标签:index log producer 文件 segment partition kafka 丢失 保证数据
一: kafka文件组成
基本组成:
1- broker 节点,多个broker构成一个集群
2- topic 对消息进行归类
3- producer 生产者
4- comsumer 消费者
5- consumerGroup 消费组
topic的组成:
1- partition 物理上数据存储的概念,一个topic包含多个partition,每个partition内部是有序的;每个partition是一个目录;
2- segment 一个partition包含多个segment,包含两种文件.index和.log。
这两个文件的命令规则为:partition全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值,数值大小为64位,20位数字字符长度,没有数字用0填充,如下:
00000000000000000000.index 00000000000000000000.log 00000000000000170410.index 00000000000000170410.log 00000000000000239430.index 00000000000000239430.log
index索引文件存储大量的元数据,log数据文件存储大量的消息。
partition内部读取数据的流程为(例如读取offset=170418的消息):
1- 首先查找segment文件。确认数据存储在00000000000000170410.index和00000000000000170410.log这两个文件中。
2- 到index文件中查找,log数据存贮的位置信息。
3- 从log日志中读取所需日志信息。
二:数据可靠性和持久性保证
1- producer端
request.required.acks参数进行配置,可靠性级别为:
1(默认) producer写到kafka中,收到leader的反馈信息后,下确认其写入成功。leader宕机,会丢失数据。
0 producer端不会收到任何的反馈信息,数据可靠性很低。
-1 producer端需要确认leader和follower都反馈成功,才认为写入成功。和min.insync.replicas参数(最小同步副本数,必须大于等于2)一起使用。利用副本冗余信息来确保数据不会丢失。但是可以会重复传输。
2- comsumer端
producer.type=sync一定要设置成同步的方式。
consumer先读取消息并处理,在commit。这种方式可以保证至少一次;
consumer 先读取消息,再commit,在处理,这种方式会丢失数据;
3- 自定义实现,缓存消息去重
标签:index,log,producer,文件,segment,partition,kafka,丢失,保证数据 来源: https://www.cnblogs.com/parent-absent-son/p/10863861.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。