Windows 10 Pro. Docker v27.4.0.
Meine C#-Anwendung funktioniert mit dem Kafka-Nachrichtenbroker. Kafka funktioniert im Docker-Container auf meinem lokalen Computer.
Wenn ich den Port 9092 auf meinem lokalen Computer für die Portzuordnung verwende (in meiner docker-compose.yml Datei), dann funktioniert es einwandfrei.
docker-compose.yml:
services:
kafka390:
container_name: kafka390
image: "apache/kafka:3.9.0"
ports:
- "9092:9092"
networks:
- message_brokers
networks:
message_brokers:
name: message_brokers
Mein C#-Clientcode:
using Confluent.Kafka;
while (true) {
try {
var config = new ProducerConfig {
BootstrapServers = "localhost:9092",
SecurityProtocol = SecurityProtocol.Plaintext,
AllowAutoCreateTopics = true,
};
var producerBuilder = new ProducerBuilder(config);
producerBuilder.SetErrorHandler((p, err) => {
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine($"ERROR CODE: {err.Code}. IsLocalError: {err.IsLocalError}, IsBrokerError: "
+ $"{err.IsBrokerError}, IsFatal: {err.IsFatal}, Reason: {err.Reason}.");
Console.ResetColor();
});
using (var p = producerBuilder.Build()) {
try {
DeliveryResult dr = await p.ProduceAsync(
"test-topic", new Message { Value = $"Hello, World!" });
Console.WriteLine($"The message '{dr.Value}' produced to Topic '{dr.TopicPartitionOffset.Topic}',"
+ $" Partition/Offset: {dr.TopicPartitionOffset.Partition}/{dr.TopicPartitionOffset.Offset}");
}
catch (ProduceException e) {
Console.WriteLine($"Delivery failed: {e.Error.Reason}");
}
}
}
catch (Exception ex) {
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine($"{DateTimeOffset.Now} | [ERROR] {ex.Message}\n\t{ex.StackTrace}");
Console.ResetColor();
await Task.Delay(1000);
}
}
Meine Programmerfolgsausgabe:
The message 'Hello, World!' produced to Topic 'test-topic', Partition/Offset: [0]/0
The message 'Hello, World!' produced to Topic 'test-topic', Partition/Offset: [0]/1
The message 'Hello, World!' produced to Topic 'test-topic', Partition/Offset: [0]/2
The message 'Hello, World!' produced to Topic 'test-topic', Partition/Offset: [0]/3
The message 'Hello, World!' produced to Topic 'test-topic', Partition/Offset: [0]/4
Aber auf meinem lokalen Computer muss ich einen anderen Port anstelle von 9092 verwenden. Zum Beispiel versuche ich, 9001 port:
updated docker-compose.yml:
zu verwendenservices:
kafka390:
container_name: kafka390
image: "apache/kafka:3.9.0"
ports:
- "9001:9092"
networks:
- message_brokers
networks:
message_brokers:
name: message_brokers
Mein C#-aktualisierter Client-Code:
using Confluent.Kafka;
while (true) {
try {
var config = new ProducerConfig {
BootstrapServers = "localhost:9001", // I updated the port here!
SecurityProtocol = SecurityProtocol.Plaintext,
AllowAutoCreateTopics = true,
};
var producerBuilder = new ProducerBuilder(config);
producerBuilder.SetErrorHandler((p, err) => {
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine($"ERROR CODE: {err.Code}. IsLocalError: {err.IsLocalError}, IsBrokerError: "
+ $"{err.IsBrokerError}, IsFatal: {err.IsFatal}, Reason: {err.Reason}.");
Console.ResetColor();
});
using (var p = producerBuilder.Build()) {
try {
DeliveryResult dr = await p.ProduceAsync(
"test-topic", new Message { Value = $"Hello, World!" });
Console.WriteLine($"The message '{dr.Value}' produced to Topic '{dr.TopicPartitionOffset.Topic}',"
+ $" Partition/Offset: {dr.TopicPartitionOffset.Partition}/{dr.TopicPartitionOffset.Offset}");
}
catch (ProduceException e) {
Console.WriteLine($"Delivery failed: {e.Error.Reason}");
}
}
}
catch (Exception ex) {
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine($"{DateTimeOffset.Now} | [ERROR] {ex.Message}\n\t{ex.StackTrace}");
Console.ResetColor();
await Task.Delay(1000);
}
}
Aber wenn ich den Port 9001 statt 9092 auf meinem lokalen Rechner verwende, erhalte ich das Problem.
Meine Programmproblemausgabe:
%3|1734768639.305|FAIL|rdkafka#producer-1| [thrd:localhost:9092/1]: localhost:9092/1: Connect to ipv4#127.0.0.1:9092 failed: Unknown error (after 2035ms in state CONNECT)
ERROR CODE: Local_Transport. IsLocalError: True, IsBrokerError: False, IsFatal: False, Reason: localhost:9092/1: Connect to ipv4#127.0.0.1:9092 failed: Unknown error (after 2035ms in state CONNECT).
%3|1734768641.644|FAIL|rdkafka#producer-1| [thrd:localhost:9092/1]: localhost:9092/1: Connect to ipv6#[::1]:9092 failed: Unknown error (after 2029ms in state CONNECT)
ERROR CODE: Local_Transport. IsLocalError: True, IsBrokerError: False, IsFatal: False, Reason: localhost:9092/1: Connect to ipv6#[::1]:9092 failed: Unknown error (after 2029ms in state CONNECT).
%3|1734768643.684|FAIL|rdkafka#producer-1| [thrd:localhost:9092/1]: localhost:9092/1: Connect to ipv6#[::1]:9092 failed: Unknown error (after 2040ms in state CONNECT, 1 identical error(s) suppressed)
ERROR CODE: Local_Transport. IsLocalError: True, IsBrokerError: False, IsFatal: False, Reason: localhost:9092/1: Connect to ipv6#[::1]:9092 failed: Unknown error (after 2040ms in state CONNECT, 1 identical error(s) suppressed).
Warum passiert das? Wie kann ich das Problem lösen?
Docker-Portzuordnung: Warum funktioniert Kafka nicht mit einem anderen lokalen Maschinenport als 9092? ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Verwendung von Testcontainern mit einem anderen Kafka-Docker-Image in JUnit5
by Anonymous » » in Java - 0 Replies
- 11 Views
-
Last post by Anonymous
-
-
-
Ist dies die richtige Kafka Consumer -Konfiguration - unter diesem Kafka -Setup?
by Anonymous » » in Java - 0 Replies
- 13 Views
-
Last post by Anonymous
-