Hi Luke,
Thanks for pointing out those existing sample configs for broker only and 
controller only and the PR. 
I added a comment with another question about node numbers. 
https://github.com/apache/kafka/pull/11616#issuecomment-997454815

We can continue the discussion there. Thanks 
Vamsee


    On Saturday, December 18, 2021, 11:22:45 PM PST, Luke Chen 
<show...@gmail.com> wrote:  
 
 Hi Vamsee,
> To summarize, if a minimal broker only and controller only config examples 
> can be added to the Kraft README they would be awesome 👍Thanks for your 
> suggestion.Actually, there are 2 example configuration files in Kraft config 
> folder:
https://github.com/apache/kafka/blob/trunk/config/kraft/broker.properties
https://github.com/apache/kafka/blob/trunk/config/kraft/controller.properties

FYR.
Also, I found the description for the `controller.listener.names` in the 
example properties file is wrong and misleading. (thanks to your question :) )
I've submitted a PR to update it. Welcome to provide feedback.
PR: https://github.com/apache/kafka/pull/11616
Thank you.Luke

On Sun, Dec 19, 2021 at 2:10 AM Vamsee Lakamsani <vam...@yahoo.com> wrote:

Hi Luke,
Thanks for your response but I don't understand.As this node is not a 
controller I first tried commenting out the 'controller.listener.names' setting 
altogether. It doesn't like it. So I tried setting it to PLAINTEXT in order to 
match the PLANTEXT:PLAINTEXT that I set for `listener.security.protocol.map' in 
the config I posted in my initial email. Sorry the formatting didn't come 
through well in that one. So here they are again better formatted.

###############
process.roles=broker
node.id=6
controller.quorum.voters=1@1.2.3.1:9093,2@ 1.2.3.2:9093,3@ 1.2.3.3:9093,4@ 
1.2.3.4:9093,5@ 1.2.3.5:9093
controller.listener.names=PLAINTEXT
listeners=PLAINTEXT://1.2.3.6:9092
inter.broker.listener.name=PLAINTEXT
 
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
############
Given that this node's role is only a broker I am wondering why we need to set 
'controller.listener.names' at all in it's config file?  Isn't 
'controller.quorum.voters' pointing to the other controller nodes not 
sufficient? I tried commenting out 'controller.listener.names' altogether on 
this node but it fails to start with another exception.
To summarize, if a minimal broker only and controller only config examples can 
be added to the Kraft README they would be awesome 👍

 
  On Sat, Dec 18, 2021 at 4:59, Luke Chen<show...@gmail.com> wrote:   Hi Vamsee,
>From the error stack trace, it is complaining the listener name: set in 
>`controller.listener.names` cannot find the mapping security protocol. Ex: 
In https://github.com/apache/kafka/blob/trunk/config/kraft/broker.properties, 
we set the `controller.listener.names=CONTROLLER`, and in the 
`listener.security.protocol.map=CONTROLLER:PLAINTEXT`, we know it is mapped to 
`PLAINTEXT`. So it can find the security protocol successfully.
Please try to check and update the 2 settings in the config file. 

Hope it helps.
Thank you.Luke




On Tue, Dec 14, 2021 at 12:48 PM Vamsee Lakamsani <vam...@yahoo.com.invalid> 
wrote:

Hi, I have a 6 node cluster with Kafka 3.0.0 with 5 nodes running in dual mode 
(controller and broker) using instructions from here: 
https://github.com/apache/kafka/blob/3.0/config/kraft/README.md. They are 
running fine. 
I set up the 6th one as just a broker to experiment. It fails to startup with 
the error. 

[2021-12-14 04:38:16,085] ERROR Exiting Kafka due to fatal exception 
(kafka.Kafka$)java.lang.IllegalArgumentException: No enum constant 
org.apache.kafka.common.security.auth.SecurityProtocol. at 
java.base/java.lang.Enum.valueOf(Enum.java:240) at 
org.apache.kafka.common.security.auth.SecurityProtocol.valueOf(SecurityProtocol.java:26)
 at 
org.apache.kafka.common.security.auth.SecurityProtocol.forName(SecurityProtocol.java:72)
 at 
kafka.raft.KafkaRaftManager.$anonfun$buildNetworkClient$1(RaftManager.scala:230)
 at scala.collection.immutable.Map$Map4.getOrElse(Map.scala:530) at 
kafka.raft.KafkaRaftManager.buildNetworkClient(RaftManager.scala:230) at 
kafka.raft.KafkaRaftManager.buildNetworkChannel(RaftManager.scala:208) at 
kafka.raft.KafkaRaftManager.<init>(RaftManager.scala:124) at 
kafka.server.KafkaRaftServer.<init>(KafkaRaftServer.scala:73) at 
kafka.Kafka$.buildServer(Kafka.scala:79) at kafka.Kafka$.main(Kafka.scala:87) 
at kafka.Kafka.main(Kafka.scala)
Its config/kraft/server.properties has relevant config like this:
===
# The role of this server. Setting this puts us in KRaft 
modeprocess.roles=broker
# The node id associated with this instance's rolesnode.id=6
# The connect string for the controller quorum (these IPs are annymized for 
privacy)controller.quorum.voters=1@1.2.3.1:9093,2@ 1.2.3.2:9093,3@ 
1.2.3.3:9093,4@ 1.2.3.4:9093,5@ 1.2.3.5:9093
############################# Socket Server Settings 
#############################
# The address the socket server listens on. It will get the value returned 
from# java.net.InetAddress.getCanonicalHostName() if not configured.#   
FORMAT:#     listeners = listener_name://host_name:port#   EXAMPLE:#     
listeners = 
PLAINTEXT://your.host.name:9092listeners=PLAINTEXT://1.2.3.6:9092inter.broker.listener.name=PLAINTEXT
# Hostname and port the broker will advertise to producers and consumers. If 
not set,# it uses the value for "listeners" if configured.  Otherwise, it will 
use the value# returned from 
java.net.InetAddress.getCanonicalHostName().#advertised.listeners=PLAINTEXT://1.2.3.6:9092
# Listener, host name, and port for the controller to advertise to the brokers. 
If# this server is a controller, this listener must be 
configured.#controller.listener.names=PLAINTEXT
# Maps listener names to security protocols, the default is for them to be the 
same. See the config documentation for more 
detailslistener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
======Thoughts?
  

  

Reply via email to