大数据开发面试题及答案-kafka篇

kafka怎么做到不丢失数据,不重复数据,以及kafka中的数据是存储在什么地方的?

昨天面试中被问到kafka怎么做到对于数据的不丢失,不重复。

首先怎么做到不重复消费呢?

在kafka的消费中,我们一般使用zookeeper充当kafka的消费者,去消费kafka中的数据。那么怎么做到不重复消费呢?假如消费了一段时间之后,kafka挂掉了,这时候需要将sparkstreaming拉起来,然后继续进行消费。那么这时候是不是又进行从头开始消费了呢?不是的,因为kafka中有一个offset,就是消费者偏移量,当sparkstreaming消费kafka中的数据,消费完一部分会向zookeeper中记录一次这个消费者偏移量,也就是记录消费到什么地方了,当系统挂掉再一次拉起来之后,会去zookeeper中寻找上一次消费到哪里了,然后接着这个地方消费。

其次,如何做到不丢失呢?

因为kafka中的消息队列中对于消息有一个过期时间,默认是7天,当然这个时间人为可以设定。在这个时间之内的数据,我们在消费的时候还可以继续去消费。

假如sparkstreaming去消费kafka中的数据,同时做处理,当处理了一天的数据量了,才发现这个处理方式式错误的,那怎么办呢?处理方法不当的这批数据是需要废弃的,需要重新进行消费的,那再怎么进行消费呢?因为在7天之内,这个数据还存储在kafka中的,需要指定from beginning,然后再去重新消费就好了。

在kafka的面试中,还会问到一个问题:

kafka中的数据存储在什么地方?

答案是kafka中的数据具体是存储在partition分区中的一个个segment分段中的。

在kafka中有topic————》partition————》segment

一个topic创建几个partition,创建的时候就可以指定。segment中存储了数据文件和索引文件。

kafka集群的规模,消费速度是多少。

答:一般中小型公司是10个节点,每秒20M左右。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注