## ---------------------------------------------------------------------------
## Licensed to the Apache Software Foundation (ASF) under one or more
## contributor license agreements.  See the NOTICE file distributed with
## this work for additional information regarding copyright ownership.
## The ASF licenses this file to You under the Apache License, Version 2.0
## (the "License"); you may not use this file except in compliance with
## the License.  You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------

name=CamelKafka-scram-sinkSinkConnector
connector.class=org.apache.camel.kafkaconnector.kafkascramsink.CamelKafkascramsinkSinkConnector
tasks.max=1

# use the kafka converters that better suit your needs, these are just defaults:
key.converter=org.apache.kafka.connect.storage.StringConverter
value.converter=org.apache.kafka.connect.storage.StringConverter

# comma separated topics to get messages from
topics=

# mandatory properties (for a complete properties list see the connector documentation):

# Comma separated list of Kafka Broker URLs
camel.kamelet.kafka-scram-sink.bootstrapServers=
# Password to authenticate to kafka
camel.kamelet.kafka-scram-sink.password=
# Comma separated list of Kafka topic names
camel.kamelet.kafka-scram-sink.topic=
# Username to authenticate to Kafka
camel.kamelet.kafka-scram-sink.user=
