Apache kafka отдельный производитель и потребитель - PullRequest
0 голосов
/ 31 мая 2019

У меня есть несколько серверов, с которых будут создаваться сообщения, и мне нужен брокер и потребитель на одном сервере. Если у меня и производитель, и потребитель работают на одном и том же сервере, то он работает нормально, но не уверен, какие изменения необходимо внести, чтобы разделить производителей. Я не хочу никакой зависимости серверов zookeeper и kafka от серверов производителей, поскольку их много, и они будут увеличиваться. Я пытался изменить сервер начальной загрузки на сервер брокера / потребителя, например 192.168.0.1:9092, при настройке KafkaProducer, но все еще не смог генерировать сообщения. Не уверен, что мне не хватает, пожалуйста, помогите мне здесь.

producer.props

bootstrap.servers=192.168.0.1:9092
acks=all
retries=0
batch.size=16384
auto.commit.interval.ms=1000
linger.ms=0
key.serializer=org.apache.kafka.common.serialization.StringSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer
block.on.buffer.full=true

Код производителя

public class Producer {
    public static void main(String[] args) throws IOException {
        // set up the producer
        KafkaProducer<String, String> producer;
        System.out.println("1");
        try (InputStream props = Resources.getResource("producer.props").openStream()) {
            Properties properties = new Properties();
            properties.load(props);
            producer = new KafkaProducer<>(properties);
        }

        try {
            for (int i = 0; i < 1000000; i++) {

                // send lots of messages
                System.out.println("bedore send");
                    producer.send(new ProducerRecord<String, String>(
                            "fast-messages",
                            String.format("{\"type\":\"marker\", \"t\":%.3f, \"k\":%d}", System.nanoTime() * 1e-9, i)));
                    producer.send(new ProducerRecord<String, String>(
                            "summary-markers",
                            String.format("{\"type\":\"other\", \"t\":%.3f, \"k\":%d}", System.nanoTime() * 1e-9, i)));
                    producer.flush();
                    System.out.println("Sent msg number " + i);
            }
            System.out.println("fdone");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            System.out.printf("%s", throwable.getStackTrace());
        } finally {
            producer.close();
        }

    }
}

1 Ответ

0 голосов
/ 31 мая 2019

Не уверен, что проблема, с которой вы сталкиваетесь, но, похоже, ясности информации нет.Я постараюсь ответить на это теоретически.Производители и потребители являются клиентами Kafka брокеров.Таким образом, поскольку брокеры правильно настроены в производителях, сообщения отправляются на серверы kafka без каких-либо проблем.Аналогично обстоит дело с потребителями.Как правило, кластер kafka (брокеры) создается отдельно для обработки сообщений.Производители и потребители не нужны для запуска серверов Kafka.Таким образом, ваши клиенты могут работать где угодно с настройкой брокеров внутри них.Нет зависимости между производителем и потребителем.Это независимые программы, которые выполняют публикацию сообщений в кластер Kafka (производители) и получение сообщений от кластера Kafka (потребители).Производители не зависят от узлов Zookeeper.Zookeeper используется в качестве зависимости серверами Kafka для управления метаданными.Ваше утверждение «любая зависимость серверов zookeeper и kafka от серверов производителей» неоправданно, так как производители будут использовать конфигурацию брокера для подключения к серверам kafka (начальная загрузка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...