当生产者向Kafka broker写数据时,可以使用ack机制来解决数据传输过程中数据丢失的问题,启用ack(比如ack=1)机制下,若生产者一直未收到上一个消息的回复,则会一直等待直到收到ack信号才会发送下一个消息,数据不会丢失。
Kafaka如果将数据使用file方式作为缓存,则文件在磁盘上,数据不会丢失,若采用memory方式,则只能通过添加partition副本方式来备份数据,因为若Kafka所在节点宕机,则内存数据会丢失,若无备份,则数据会丢失。
当别的系统如Flume,Spark等从Kafka拉取数据的时候,每拉取一条数据,Kafka会自动更新一个offset偏移量,这个偏移量记录了这个消费者组消费数据的位置,偏移量可以由Kafka自动提交,也可可以由消费者手动提交。若发生宕机事故,可以根据offset偏移量来定位数据消费位置,从而不会重复消费或者丢失数据。