高性能kafka之消息可靠性分析及常见问题

    kfaka发消息的模式分为同步和异步,默认是同步的,异步的吞吐量比较高,但是消息丢失的概率比较大,同步还是异步可以通过producer.type属性进行控制
    kafka有三种消息确认机制,由request.required.acks属性控制,acks=0时代表不适用确认机制,producer发送消息之后就不管消息是否成功,这种情况吞吐量最高,同时消息可靠性难以保证,会出现丢消息的问题;acks=1时,leader收到消息后会返回确认消息,此时如果leader收到消息但是follow未同步,则可能造成消息丢失,acks=-1时,leader和follow都收到消息时进行确认,此时leader挂了,follow中还是有消息的存在,最安全,但是吞吐量有所下降;
    对于异步情况,如果发消息的时候缓存区满,producer再写数据时会清空缓存池,此时会造成消息丢失,可以通过设置缓存区满时阻塞来规避这种情况


kafka消息唯一性的保证,
同步状态下确认机制设置成-1
异步状态下设置缓存池满时producer阻塞,可以保证消息不丢失,
消费者处理数据时,使用唯一索引,重复数据过滤, 以此来保证数据不重复,

但是对于producer发送了消息,broker还未接受,然后producer挂掉了的情况,消息还是会丢失的;

你可能感兴趣的:(kafka)