Kubernetes-keda-kafka-configuration
Budget: $10 – $30 USD
I have the following kafka parameters on my producer and consumer (java code)
String host = "xxxxx.cloudclusters.net";
int port = 19968;
String boostrap_servers = String.format("%s:%d", host, port);
String topic = "voto";
String sasl_username = "kafuser";
String sasl_password = "xxxxxxxxx";
String truststore_location = "/usr/app/kafka.truststore.jks";
String keystore_location = "/usr/app/kafka.keystore.jks";
String truststore_password = "vkVCYDae";
String keystore_password = "vkVCYDae";
String jaasTemplate = "org.apache.kafka.common.security.scram.ScramLoginModule required
username=\"%s\" password=\"%s\";";
String jaasConfig = String.format(jaasTemplate, sasl_username, sasl_password);
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrap_servers);
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_SSL");
props.put(SaslConfigs.SASL_MECHANISM, "SCRAM-SHA-256");
props.put(SaslConfigs.SASL_JAAS_CONFIG, jaasConfig);
props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, truststore_location);
props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, truststore_password);
props.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, keystore_location);
props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, keystore_password);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 30 * 1000);
props.put(ProducerConfig.RETRIES_CONFIG, 5);
props.put(ProducerConfig.RECONNECT_BACKOFF_MS_CONFIG, 3000);
and i need to set these connection(like key and certificates) values in keda.yml file to allow
keda to autoscale kafka consumer.
apiVersion: v1
kind: Secret
metadata:
name: keda-kafka-secrets
namespace: default
data:
authMode: "sasl_plaintext"
username: "admin"
password: "admin"
ca: <your ca>
cert: <your cert>
key: <your key>
---
apiVersion: keda.k8s.io/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-kafka-credential
namespace: default
spec:
secretTargetRef:
- parameter: authMode
name: keda-kafka-secrets
key: authMode
- parameter: username
name: keda-kafka-secrets
key: username
- parameter: password
name: keda-kafka-secrets
key: password
- parameter: ca
name: keda-kafka-secrets
key: ca
- parameter: cert
name: keda-kafka-secrets
key: cert
- parameter: key
name: keda-kafka-secrets
key: key
---
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
name: kafka-scaledobject
namespace: default
spec:
scaleTargetRef:
deploymentName: azure-functions-deployment
pollingInterval: 30
triggers:
- type: kafka
metadata:
bootstrapServers: localhost:9092
consumerGroup: my-group # Make sure that this consumer group name is the same one as the one that is consuming topics
topic: test-topic
# Optional
lagThreshold: "50"
authenticationRef:
name: keda-trigger-auth-kafka-credential
I"m currently using minikube on windows and need to set this yml to connect and to autoscale kafka consumer with keda.
String host = "xxxxx.cloudclusters.net";
int port = 19968;
String boostrap_servers = String.format("%s:%d", host, port);
String topic = "voto";
String sasl_username = "kafuser";
String sasl_password = "xxxxxxxxx";
String truststore_location = "/usr/app/kafka.truststore.jks";
String keystore_location = "/usr/app/kafka.keystore.jks";
String truststore_password = "vkVCYDae";
String keystore_password = "vkVCYDae";
String jaasTemplate = "org.apache.kafka.common.security.scram.ScramLoginModule required
username=\"%s\" password=\"%s\";";
String jaasConfig = String.format(jaasTemplate, sasl_username, sasl_password);
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrap_servers);
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_SSL");
props.put(SaslConfigs.SASL_MECHANISM, "SCRAM-SHA-256");
props.put(SaslConfigs.SASL_JAAS_CONFIG, jaasConfig);
props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, truststore_location);
props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, truststore_password);
props.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, keystore_location);
props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, keystore_password);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 30 * 1000);
props.put(ProducerConfig.RETRIES_CONFIG, 5);
props.put(ProducerConfig.RECONNECT_BACKOFF_MS_CONFIG, 3000);
and i need to set these connection(like key and certificates) values in keda.yml file to allow
keda to autoscale kafka consumer.
apiVersion: v1
kind: Secret
metadata:
name: keda-kafka-secrets
namespace: default
data:
authMode: "sasl_plaintext"
username: "admin"
password: "admin"
ca: <your ca>
cert: <your cert>
key: <your key>
---
apiVersion: keda.k8s.io/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-kafka-credential
namespace: default
spec:
secretTargetRef:
- parameter: authMode
name: keda-kafka-secrets
key: authMode
- parameter: username
name: keda-kafka-secrets
key: username
- parameter: password
name: keda-kafka-secrets
key: password
- parameter: ca
name: keda-kafka-secrets
key: ca
- parameter: cert
name: keda-kafka-secrets
key: cert
- parameter: key
name: keda-kafka-secrets
key: key
---
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
name: kafka-scaledobject
namespace: default
spec:
scaleTargetRef:
deploymentName: azure-functions-deployment
pollingInterval: 30
triggers:
- type: kafka
metadata:
bootstrapServers: localhost:9092
consumerGroup: my-group # Make sure that this consumer group name is the same one as the one that is consuming topics
topic: test-topic
# Optional
lagThreshold: "50"
authenticationRef:
name: keda-trigger-auth-kafka-credential
I"m currently using minikube on windows and need to set this yml to connect and to autoscale kafka consumer with keda.