Java Kafka表使用哪个客户端ID
我正在尝试构建一个事件驱动的应用程序。 要求某些服务只使用Kafka事件来存储信息,所以我使用Kafka表 我有两个服务共享同一个Kafka表,这是一个复杂的业务逻辑,因此我希望确保使用相同的代码构建该表 我的问题是:我可以为同一Kafka表的不同实例共享相同的客户端id吗 我已经构建了这个示例,它只运行过一次。但现在我遇到了一些问题。它总是有一个例外:状态存储,主题名称,可能已经迁移到另一个实例 我的两个服务都在同一台机器上运行,没有容器 我正在使用以下配置我的卡夫卡流:Java Kafka表使用哪个客户端ID,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我正在尝试构建一个事件驱动的应用程序。 要求某些服务只使用Kafka事件来存储信息,所以我使用Kafka表 我有两个服务共享同一个Kafka表,这是一个复杂的业务逻辑,因此我希望确保使用相同的代码构建该表 我的问题是:我可以为同一Kafka表的不同实例共享相同的客户端id吗 我已经构建了这个示例,它只运行过一次。但现在我遇到了一些问题。它总是有一个例外:状态存储,主题名称,可能已经迁移到另一个实例 我的两个服务都在同一台机器上运行,没有容器 我正在使用以下配置我的卡夫卡流: Properties
Properties config = new Properties();
config.put(StreamsConfig.APPLICATION_ID_CONFIG, applicationName);
config.put(StreamsConfig.CLIENT_ID_CONFIG, applicationName + "-client");
config.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, ConfigurationResolver.get().resolve("kafka.broker"));
config.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 10 * 1000);
config.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
config.put(StreamsConfig.DEFAULT_DESERIALIZATION_EXCEPTION_HANDLER_CLASS_CONFIG, IgnoreTypeMismatch.class);
config.put(StreamsConfig.DEFAULT_PRODUCTION_EXCEPTION_HANDLER_CLASS_CONFIG, IgnoreTypeMismatch.class);
config.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
config.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, GenericGsonSerde.class);
config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
config.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 10 * 1000);
KafkaStreams streams = new KafkaStreams(builder.build(), config)
streams.cleanUp();
streams.start();
Runtime.getRuntime().addShutdownHook(new Thread(streams::close));
如果您有两个不同的服务,那么应该使用两个不同的application.id。不能在不同的服务之间共享同一个KTable,但每个服务都需要它自己的KTable副本。因此,您可以为两个服务使用相同的代码来创建相同的KTable,或者让一个服务计算KTable,将其写入主题,然后让另一个服务使用该主题来获取KTable的副本
如果你想共享一个KTable,你需要用一个应用程序将两个服务合并成一个服务。id.你能发布一些代码吗?也许是这样的,您正在流应用程序中进行设置。另外,application.id是您应该设置的,client.id是一个内部标识符。没有client.id和具有相同application.id的行为是相同的。它只适用于不同的client.idHmm。很难,我想知道事情是否因为streams.cleanUp而处于一种奇怪的状态。我从来不会因为害怕而使用它。在使用它之前有一些先决条件。我猜是你干的?