每天向Kinesis发送数十亿条信息。
我们正在寻找一种实现,它允许我们以精确一次的保证将消息传递给Kinesis。
我们的producer框架要求流式接收器对于一次交付保证是幂等的,而Kinesis则不是。所以我们目前至少有一次发货。(复制是可能的,我们确实看到了它们,无论出于何种原因,流式微批次必须在生产商端重新启动)
我们开始研究Kinesis Producer Library(KPL)回调函数。基本上,我们将根据每条消息中存在的密钥跟踪DynamoDB中传递的消息和未传递的消息的状态。如果我们知道已经发送了一条消息,我们将跳过它进行重新尝试。那么,似乎只有一次可能。。有两个问题:
1) 我们唯一的问题是——我们失去回调函数调用的可能性有多大(例如,网络故障等),或者回调函数本身失败(例如,我们遇到了DynamoDB限制/中断等)——这是否有文档记录?我知道可能性不高,但我们希望设计一个系统,能够适应像这样的预期。
2)时机。假设Kinesis出于任何原因调用了具有延迟的回调函数(5-15毫秒足以打破上述回调函数中的一些假设,这些回调函数在DynamoDB中保持交付状态)。虽然我们还没有收到关于交付的确认,但我们的流媒体生产者框架已尝试重新交付它认为尚未交付的内容。这个潜在问题有什么解决办法吗?
PS。我们知道解决方法之一是在应用程序端(来自运动流的接收器)进行dedups,但这超出了我们的项目,我们有一个硬性要求,即精确地进入运动流。
对于#1,您走的任何路径都会发现自己处于可能导致数据丢失或重复调用的边缘情况。如果消费者不参与该协议,即使使用两阶段提交协议在这里也不起作用。
对于#2,运动是有序的,因此如果您确实获得了重复的,您应该能够可靠地假设它们将位于同一个碎片上,因此在另一个读卡器仍在处理时不会进行处理(假设每个碎片有一个读卡器)。在调用DynamoDB时,只需确保您使用的是强一致的读取。
Kafka为每条消息生成偏移量。假设,我正在生成消息5,偏移量将从1到5。 但是,在事务生产者中,比如说,我产生了5条消息并提交,然后是5条消息但中止,然后是5条消息提交。 > 那么,最后提交的5条消息的偏移量是6到10还是11到15? 如果我不放弃或不promise呢。这些信息还会被发布吗? Kafka是如何忽略未promise的补偿的?因此,kafka提交日志是基于偏移量的。它是否使用事务使用
主要内容:1 创建DefaultMQProducer实例,2 start启动生产者,2.1 getOrCreateMQClientInstance获取或者创建MQClientInstance,2.2 registerProducer注册生产者,3 start启动MQClientInstance,3.1 mQClientAPIImpl#start启动netty客户端,3.2 startScheduledTask启动各种定时任务,基于RocketMQ 4.9.3,详细介绍了RocketMQ的客户端P
我正在处理一个kafka用例,在这个用例中,我需要在生产者和消费者端具有事务性语义...我可以使用kafka transaction API 0.11将事务性消息发布到kafka集群,但在消费者端,我面临着一个问题...我在属性文件中设置了但我不能使用它...我可以看到消息被使用但这不是希望的... 生产者代码 ProducerTX.Properties 消费者 感谢你的帮助..谢谢
我在应用程序中使用了Kafka 1.0.1,我已经开始使用0.11中引入的幂等生产者功能,在使用幂等生产者功能时,我很难理解排序保证。 我的生产者的配置是: 重试50次 根据文件: 重试 设置一个大于零的值将导致客户端重新发送任何记录,如果该记录的发送失败,可能会出现暂时性错误。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。允许在不设置最大值的情况下重试。航班请求。每连接到1可能会改
我正在使用一个非事务性生产者,并试图理解如何处理成功/失败场景的回调。 对于一个成功的发送,我看到回调由kafka-producer-network-thread线程执行(“send ok”消息)。 发送消息成功-kafka-producer-network-thread 00:59:17.522
我正在搜索动觉数据流的文档,但我找不到像 动情保证至少一次交付 从生产者方面,我预计发送的消息会传播到多个节点(类似于Kafka的ack=all)从消费者方面,我预计在消费者成功处理时会有相当于Kafka提交偏移量的东西,或者类似于Google Cloud的Pub/Sub消息确认。 是否有动觉提交信息保证?是否有动觉处理保证(如果已处理并确认已处理,则将消息标记为只读)