Table of Contents |
---|
Status
Current state: Under Discussion
...
Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).
Motivation
The purpose of the change is to accommodate environments without proper DNS support, when KafkaProducer or KafkaConsumer tries to connect to Kafka brokers that are inside another network.
...
The KIP improves NetworkClient to redirect the call to alternative network address and provides developers with additional Configurable interface to specify redirection rules.
Public Interfaces
Introduce new org.apache.kafka.common.network.Redirector interface that will be used by org.apache.kafka.common.network.Selector to redirect to alternative broker address.
Code Block | ||||
---|---|---|---|---|
| ||||
package org.apache.kafka.common.network; import java.net.InetSocketAddress; import org.apache.kafka.common.Configurable; public interface Redirector extends Configurable { public InetSocketAddress redirect(InetSocketAddress address); } |
Proposed Changes
With respect to proposed interface the following changes in existing classes are required:
...
Code Block | ||||
---|---|---|---|---|
| ||||
public class CustomBrokerRedirector implements Redirector { @Override public void configure(Map<String, ?> props) {} @Override public InetSocketAddress redirect(InetSocketAddress address) { String host = address.getHostString(); if (host.contains("kafka-0")) return new InetSocketAddress("localhost", 9092); else if (host.contains("kafka-1")) return new InetSocketAddress("localhost", 9093); else if (host.contains("kafka-2")) return new InetSocketAddress("localhost", 9094); else if (host.contains("kafka-3")) return new InetSocketAddress("localhost", 9095); else if (host.contains("kafka-4")) return new InetSocketAddress("localhost", 9096); return address; } } |
Compatibility, Deprecation, and Migration Plan
The KIP is fully backward-compatible. If no Redirector configuration specified, Selector will work in the same way.
Rejected Alternatives
None