Я новичок в GCP.
Я создал кластер Multinode Kafka и Zookeeper в облачной платформе Google. Я могу получить доступ к двоичным файлам Kafka и общаться внутри кластера, войдя в виртуальную машину, используя gcloud shell
. Теперь я хочу получить доступ к этим брокерам Kafka в Java-приложении.
Каждая виртуальная машина обеспечивает внутренний и внешний IP. Когда я использую внешний IP-адрес, мое Java-приложение не может распознать IP-адрес. Может ли тот, кто имеет опыт работы с облаком Google, помочь мне получить доступ к этим узлам в моем приложении Java.
Вот код Java, который я пытаюсь использовать
public class AvroConsumer<T> {
private static Properties kafkaProps;
static {
kafkaProps = new Properties();
kafkaProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
kafkaProps.put("bootstrap.servers", "instance-1:9092,instance-2:9092,instance-3:9092");
kafkaProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
kafkaProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class);
kafkaProps.put(ConsumerConfig.GROUP_ID_CONFIG, "AvroConsumer-GroupOne");
}
public void recieveRecord() throws IOException {
try (KafkaConsumer<String, byte[]> kafkaConsumer = new KafkaConsumer<>(kafkaProps)) {
kafkaConsumer.subscribe(Arrays.asList("jason"));
while (true) {
ConsumerRecords<String, byte[]> records = kafkaConsumer.poll(100);
Schema.Parser parser = new Schema.Parser();
final Schema schema = parser
.parse(AvroProducer.class.getClassLoader().getResourceAsStream("syslog.avsc"));
records.forEach(record -> {
SpecificDatumReader<T> datumReader = new SpecificDatumReader<>(schema);
ByteArrayInputStream is = new ByteArrayInputStream(record.value());
BinaryDecoder binaryDecoder = DecoderFactory.get().binaryDecoder(is, null);
try {
T log = datumReader.read(null, binaryDecoder);
System.out.println("Value: " + log);
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
}
}
Edit1:
Я попытался настроить свойства server.properties, как показано ниже.
listeners=INTERNAL://${internal-ip}:19092,EXTERNAL://${external-ip}:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=INTERNAL://${internal-ip}:19092,EXTERNAL://${external-ip}:9092
inter.broker.listener.name=INTERNAL
Не сработало