Как получить доступ к внешним ips виртуальной машины Google Compute Engine в Java-приложении - PullRequest
0 голосов
/ 01 ноября 2018

Я новичок в 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

Не сработало

...