我正在使用Kafka和Java Api进行首次测试
下面我详细说明了我要遵循的步骤,这对我来说是一个新世界,我不知道我是否错过了一步,但我不这样做。
我认为的第一件事是一个动物园管理员和一个带有码头工人的卡夫卡,我输入卡夫卡并执行命令,这是正确的
// docker-compose.yml
version: "3.6"
services:
zk-svc:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
restart: always
kafka-svc:
image: wurstmeister/kafka
depends_on:
- zk-svc
ports:
- "9092:9092"
restart: always
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.1.147
KAFKA_ZOOKEEPER_CONNECT: zk-svc:2181
我创建了一个名为“测试”的主题
//创建主题
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
我看着容器的IP地址
//获取IP容器
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' kafka-zk_zk-svc_1
最后,我将主题和容器ip的数据应用于产生消息的java类中
// JAVA CLASS
public class Producers {
public static String brokerList = "172.21.0.3:9092";
public static String topic = "test";
public static void main(String[] args) throws InterruptedException, ExecutionException {
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, "com.kafka.api.producer.SimplePartitioner");
Producer<String, String> producer = new KafkaProducer<>(props);
for (int id = 0; id < 5000; id++) {
String key = String.format("key[%d]", id);
String message = String.format("message[%d]", id);
System.out.println("Sending message with: " + key);
producer.send(new ProducerRecord<>(topic, key, message));
Thread.sleep(1000);
}
producer.flush();
producer.close();
}
}
根据Java控制台,他似乎发送得很好:
// Java控制台
Sending message with: key[0]
Sending message with: key[1]
Sending message with: key[2]
...
我创建了一个消费者:
//创建消费者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
在消费者中什么都没有给我。我不知道我在做什么错。 是否有人看到任何步骤错误或我错过了一步?