Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kafka表使用哪个客户端ID_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java Kafka表使用哪个客户端ID

Java Kafka表使用哪个客户端ID,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我正在尝试构建一个事件驱动的应用程序。 要求某些服务只使用Kafka事件来存储信息,所以我使用Kafka表 我有两个服务共享同一个Kafka表,这是一个复杂的业务逻辑,因此我希望确保使用相同的代码构建该表 我的问题是:我可以为同一Kafka表的不同实例共享相同的客户端id吗 我已经构建了这个示例,它只运行过一次。但现在我遇到了一些问题。它总是有一个例外:状态存储,主题名称,可能已经迁移到另一个实例 我的两个服务都在同一台机器上运行,没有容器 我正在使用以下配置我的卡夫卡流: Properties

我正在尝试构建一个事件驱动的应用程序。 要求某些服务只使用Kafka事件来存储信息,所以我使用Kafka表

我有两个服务共享同一个Kafka表,这是一个复杂的业务逻辑,因此我希望确保使用相同的代码构建该表

我的问题是:我可以为同一Kafka表的不同实例共享相同的客户端id吗

我已经构建了这个示例,它只运行过一次。但现在我遇到了一些问题。它总是有一个例外:状态存储,主题名称,可能已经迁移到另一个实例

我的两个服务都在同一台机器上运行,没有容器

我正在使用以下配置我的卡夫卡流:

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而处于一种奇怪的状态。我从来不会因为害怕而使用它。在使用它之前有一些先决条件。我猜是你干的?