当前位置: 首页 > 知识库问答 >
问题:

Kafka状态-在不同缩放实例上存储

翟功
2023-03-14

我有5台不同的机器,每个机器都有使用kafka-streams应用程序的缩放的5个Spring Boot实例。我正在使用50个分区压缩主题与不同的2-3个主题,我的每个实例有10个并发。我正在使用docker swarm和docker Volume。使用这些主题KTable或KStream对我的kafka streams应用程序执行一些flatMap、map和join操作。

    props.put(StreamsConfig.STATE_DIR_CONFIG, /tmp/kafka-streams);
    props.put(StreamsConfig.REPLICATION_FACTOR_CONFIG, 3);
    props.put(StreamsConfig.NUM_STANDBY_REPLICAS_CONFIG, 2);
    props.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 100);
    props.put(StreamsConfig.PROCESSING_GUARANTEE_CONFIG, EXACTLY_ONCE);
    props.put("num.stream.threads", 10);
    props.put("application.id", applicationId);

如果一切正常,在我的应用程序中,使用.join()操作就不会有任何错误或数据丢失,但是当我的一个实例关闭时,我的连接操作实际上无法进行连接。

我的问题是:当应用程序重新启动或重新部署(并且考虑到它在非持久性容器中工作)时,它的状态就会改变,对吗?我的加入操作不起作用。当我重新部署我的实例并使用最新的实体从elasticsearch填充我的压缩主题时,我的连接操作就可以了。所以我想当我的应用程序在新机器上启动时,我的本地State Store就消失了?但Kafka的文件说:

当kafka State-Store运行时,我被关闭的实例是否会刷新它?如果这就是我丢失数据并且我不知道的原因:/或者由于commit_offset而无法重新加载状态存储,因为我的所有实例都使用相同的applicationId?

谢谢!

共有1个答案

华永逸
2023-03-14

changelog主题总是从最早的偏移量读取,并且它们被压缩,因此不会丢失数据。

如果您加入了非紧凑主题,那么当然,您会丢失数据,但这并不限于Kafka流或您的特定用例...您需要将主题配置为至少在您认为需要解决任何主题停机问题的时间内保留数据。在保留数据的同时,您可以始终寻找您的使用者

如果您想要持久存储,例如,通过Kubernetes将卷挂载到您的容器,或者插入存储在容器外部的state state store,如Redis:https://github.com/andreas-Schroeder/redisks

 类似资料:
  • 我用状态存储构建了一个kafka流媒体应用程序。现在我正在尝试扩展这个应用程序。当在三个不同的服务器上运行应用程序时,Kafka会随机拆分分区和状态存储。 例如: Instance1获取:分区-0,分区-1 Instance2获取:partition-2,stateStore-repartition-0 Instance3获取:stateStore-重新分区-1,stateStore-重新分区-2

  • 全局状态存储与普通状态存储有何不同? 全局状态存储是否在不同机器上运行的所有实例中都有数据副本?由于全局状态存储不使用任何更改日志主题进行恢复,因此在重新启动时它的行为在我的场景中全局存储的源主题没有键。

  • 代码: 这就是我初始化相机的方式。 I',试图获得设备的分辨率,并在此基础上设置相机的宽度和高度。 问题是。 我认为精灵不会在更高分辨率的设备上缩放。 根据我的知识和引擎本机缩放相机和精灵。 那么为什么精灵在这种情况下不会被缩放呢? 我应该如何根据分辨率放大精灵? 我也试过FillResolutionPolicy。同样的事情。 我用的是TexturePackerExtension of anden

  • 我们目前正在实现一个过程(使用Kafka处理器API),我们需要将来自一个主题的两个相关事件(消息)的信息合并,然后转发这些合并的信息。事件源于物联网设备,由于我们希望保持其有序,因此源主题使用设备标识符作为键。事件还包含相关ID: 钥匙 留言 我们的第一种方法是创建一个具有连接状态存储的处理器,该存储存储每条传入的消息,使用相关ID作为键。这使我们能够查询存储以获取传入消息的相关ID,如果存储中

  • 我在本地机器中运行多个kafka流消费者实例(2个实例),每个实例都有自己的自定义本地存储,每个实例的名称不同。 根据文档,如果其中一个实例发生故障,则kafka必须将死实例的存储同步到活实例的存储(如果我错了,请更正我)。 我用相同的应用程序id配置了两个实例,让kafka知道这些实例属于同一个组。 当其中一个实例被杀死时,另一个(活动)实例的存储未与死实例的存储同步。我在两个商店都启用了更改日

  • 本文是讲解状态压缩DP的第二部分,仍然是对基于连通性问题的探讨与学习。一些概念性的问题,以及基本解法 在第一节中讲过,这里就不再赘述。 对典例蒙德里安的梦想的分析直接看例题: 求把 N×M 的棋盘分割成若干个 1×2 的长方形,有多少种方案。 例如当 N=2,M=4 时,共有 5 种方案。当 N=2,M=3 时,共有 3 种方案。 如下图所示: 输入格式 输入包含多组测试用例。 每组测试用例占一行