你可以看下 https://www.orchome.com/511 中的ack介绍。
c语言没用过额,抱歉,但是默认kafka的客户端发送是批量发送的,也就是说,消息并没有马上发送到kafka,而是先保留在缓存中,进行批量准备,然后发送,这也是kafka高效的原因之一,所以你要等待。
默认kafka异步发送可以通过异步回调通知来确保消息是否成功发送,c语言客户端不知道有没有提供,你可以关注下c语言版本的客户端。
非常感谢大神的解答!再请教几个问题:
4.我将producer应用程序发送消息到Kafka完全设置为异步非阻塞的,例如在C语言的producer接口中需要调用rd_kafka_flush()来等待完成producer请求,若果不等待,这样是不是会有丢数据的风险?
5.另外Kafka方面怎么保证数据完全接收到producer消息呢,是不是每发1条(或若干条)然后对producer进行确认?
1、比如默认保留7天消息,如果你磁盘够大,你保留1年都可以,不重复消费是你自己配置的。比如auto.offset.reset= latest,就不会重复了,当你需要重新消费之前的数据,改成earliest就可以了。
2、topic消息的生活周期同上,看你保留多久。
3、消息是没有状态的,也就是说没有有效时间,默认保留7天。但是你不能把保留时间设置5分钟吧。那你还是用rabbitMQ做吧。kafka不合适。
看了文章之后有几个疑问。想请教一下大神
1.Kafka适合用作数据存储吗,如果适合,那么怎么保证Consumer连接Kafka接收消息时对数据的不重复消费(就是当Consumer应用程序关闭后再打开消息重复接收了)。
2.Topic消息的生命周期最低可以配置多少?
3.那么可以将每个Topic分别设置不同的有效时间吗?例如Topic1的消息有效时间是5分钟,Topic消息的有效时间是7天。