Table of Contents |
---|
This page is meant as a template for writing a KIP. To create a KIP choose Tools->Copy on this page and modify with your content and replace the heading with the next KIP number and a description of your issue. Replace anything in italics with your own description.
Status
Current state: Under Under Discussion
Discussion thread: here [Change the link from the KIP proposal email archive to your own email thread]
...
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
If there are alternative ways of accomplishing the same thing, what were they? The purpose of this section is to motivate why the design is the way it is and not some other way.