Apache Kafka的生产者和消费者

时间:2019-05-31 06:30:11

标签: apache-kafka

我有多台服务器,从中将生成消息,并且在一台服务器上需要代理和使用者。 如果我在同一台服务器上同时运行了生产者和使用者,那么它可以正常工作,但不确定要进行哪些更改以使生产者保持独立。我不想在生产者服务器上依赖任何Zookeeper和kafka服务器,因为它们会越来越多。 我在设置KafkaProducer时尝试将引导服务器更改为代理服务器/消费者服务器(如192.168.0.1:9092),但仍然无法生成消息。不确定我缺少什么,请在这里帮助我。

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 :(得分:0)

不确定您遇到的问题,但似乎信息不清晰。我将尝试从理论上回答它。 生产者和消费者都是Kafka经纪人的客户。因此,只要在生产者中正确配置了代理,消息就可以毫无问题地发送到kafka服务器。消费者也是如此。通常,分别创建kafka群集(代理)以处理消息。生产者和消费者不需要运行Kafka服务器。因此,您的客户端可以在其中配置代理的情况下在任何地方运行。生产者和消费者之间没有依赖性。它们是独立的程序,负责将消息发布到Kafka集群(生产者)并从kafka集群(消费者)接收消息。生产者不依赖Zookeeper节点。 Zookeeper被Kafka服务器用作对元数据管理的依赖项。您的声明“任何依赖Zookeeper和kafka服务器在生产者服务器上的依赖关系”都是不合理的,因为生产者将使用代理配置连接到kafka服务器(引导)。