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挂掉了的情况,消息还是会丢失的;

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐