Kafka数据丢失汇总
在大数据的领域中,数据显得尤其的重要。在每一个组件、每一个步骤中,我们都要对数据进行妥善的处理、保护,才能得到更有说服力、有意义的数据。
所以数据丢失,就成为了一件非常严重的事情;所以在我们的生产环境中,防止数据丢失就显得尤其重要。
第1章
Kafka作为我们消息队列的中间件,基于订阅和发布的消息队列;解除生产者(消息源)和消费者(数据接收处)的耦合关系,消除某时段数据传输速度高峰值,启动一个缓冲的作用。
Kafka以时间复杂度O(1)的方式提供消息持久化能力,即使应对TB级以上数据也能保证一定时间的访问性能。
Kafka具有高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100k条消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
Kafka同时支持离线数据处理和实时数据处理。
那么这样一个可靠的组件,也会发生数据丢失。那么针对这一问题,我们来对其多方位的进行分析。
第2章 如何发现问题
(1)是否多人在操作生产环境
(2)接收数据处有无数据
(3)反常现象:比如电商项目中双十一数据量正常来说会比之前高很多,但是却和平常日期数据量相似或者数据量还要少。
(4)如果生产者端丢失数据,那么每次结果应该完全一样;如果不一样,生产者端便出了问题。
(5)如果消费者端丢失数据,那么每次消费结果完全一样的几率很低。
第3章 问题所在
根据实际生产环境发生的Kafka数据丢失现象,我做了如下汇总。
3.1 多客户端操作问题
发生这种问题,不是真正的发生了数据丢失;我们的大数据开发环境中,是必须支持多客户端开发的,多人使用数据,那么会有几率造成,两人甚至多人同时操控一份数据。这就比如有同事操作了测试环境,动用了你本来要用的数据,所以你无法找到了你的数据,便认为发生了数据丢失。
3.2 组件流程问题
并不是真正Kafka发生了数据丢失,而是Kafka上游段或者下游段发生了数据丢失,比如上游段连接Flume组件,Flume发生了数据丢失,表现为Kafka内数据不全或者没有数据,之后认为Kafka发生了数据丢失;再或者Kafka下游连接Flume组件,Flume发生数据丢失,数据没有传输到HDFS上,导致HDFS无法找到数据,从而猜测Kafka数据丢失。