怎么解决 Kafka 数据丢失的问题

2020-06-23 22:06发布

怎么解决 Kafka 数据丢失的问题 ?

怎么解决 Kafka 数据丢失的问题

1条回答
yangzp
2020-06-24 17:30

1、生产者数据的不丢失

kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到,其中状态有0,1,-1。

0:生产者只管发送,不管服务器,消费者是否收到信息

1:只有当leader 确认了收到消息,才确认此消息发送成功

-1:只有isr 中的n-1个副本(leader 除外所以n-1)都同步了消息 此消息才确认发送成功


2、消费者数据的不丢失

通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着上次的offset进行消费。

而offset的信息在kafka0.8版本之前保存在zookeeper中,在0.8版本之后保存到topic中,即使消费者在运行过程中挂掉了,再次启动的时候会找到offset的值,找到之前消费消息的位置,接着消费,由于offset的信息写入的时候并不是每条消息消费完成后都写入的,所以这种情况有可能会造成重复消费,但是不会丢失消息。

唯一例外的情况是,我们在程序中给原本做不同功能的两个consumer组设置KafkaSpoutConfig.bulider.setGroupid的时候设置成了一样的groupid,这种情况会导致这两个组共享同一份数据,就会产生组A消费partition1,partition2中的消息,组B消费partition3的消息,这样每个组消费的消息都会丢失,都是不完整的。? 为了保证每个组都独享一份消息数据,groupid一定不要重复才行。


3、kafka集群中的broker的数据不丢失

每个broker中的partition我们一般都会设置有replication(副本)的个数,生产者写入的时候首先根据分发策略(有partition按partition,有key按key,都没有轮询)写入到leader中,follower(副本)再跟leader同步数据,这样有了备份,也可以保证消息数据的不丢失。


一周热门 更多>