## ---------------------------------------------------------------------------
## 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.
## ---------------------------------------------------------------------------

debezium.mysql.name = debezium-mysql-example-01

debezium.mysql.databaseHostName = localhost
debezium.mysql.databaseServerId = 8445698
debezium.mysql.databaseUser = debezium
debezium.mysql.databasePassword = dbz
debezium.mysql.databaseServerName = debezium-connector-mysql-01
debezium.mysql.databaseHistoryFileName = dbhistory-01.data
debezium.mysql.databaseWhitelist = inventory

debezium.mysql.tableWhitelist = inventory.products

debezium.mysql.offsetStorageFileName = offset-01.data

kinesis.streamName = camel-debezium-example
kinesis.accessKey = {{generated-access-key}}
kinesis.secretKey = {{generated-secret-key}}
kinesis.region = EU_CENTRAL_1

cassandra.host = localhost:9042
cassandra.keyspace = dbzSink