SlideShare a Scribd company logo
1 of 58
Download to read offline
Apache Druid Auto Scale-out/in for Streaming
Data Ingestion on Kubernetes
Jinchul Kim
About Jinchul
• DevOps engineer and Senior Software Developer at SK Telecom (2017 ~ )
• Scrum master for cloud platform development using Kubernetes, Docker, and a variety of applications
• Committer of Apache Impala Project (2018 ~)
• SAP HANA in-memory engine at SAP Labs Korea (2008 ~ 2017)
• Designed, wrote server-side code by using C++: SQL/SQLScript parser, semantic analyzer, SQL optimizer, rule/
cost based optimization, plan explanation and executor, SQL plan cache, and SQLScript debugger
• Received "SAP Applaud Award" for strategic contribution with impact across teams/functions and overcame
significant challenges on HANA scale-out quality
• Motivation
• Background & terminology
• Apache Kafka
• Apache Druid
• Docker & Kubernetes
• Helm
• Auto Scaling in Druid
• Horizontal Pods Auto Scaling with Custom Metrics on Kubernetes
• Horizontal Pods Auto Scaling: Scale-in issue and workarounds
• Conclusion
Agenda
Motivation
• Why do we need auto-scaling?

• Cost saving by resource management

• What kinds of information do we need for auto-scaling?

• Hardware resource metrics

• Custom metrics from service
Motivation (Cont.)
• Drawbacks in auto-scaling feature of Apache Druid

• Druid's auto scaling is only available in AWS

• A few minutes for start-up and shutdown of VMs

• Druid's auto scaling is tightly coupled with AWS API
Background 

& Terminology
[Overview of Apache Kafka — By Ch.ko123 — Own work, CC BY 4.0, 

https://commons.wikimedia.org/w/index.php?curid=59871096]
[Druid Architecture, http://druid.io/technology]
[Druid Architecture, http://druid.io/docs/latest/design/ ]
[Druid Architecture, http://druid.io/technology]
[Druid Architecture, http://druid.io/technology]
• Overlord
• Assigns ingestion tasks to Middle
Managers 

• Is a controller of data ingestion into Druid

• Watches over Middle Managers

• Coordinates segment publishing

• Middle Manager
• Processes handle ingestion of new data
into the cluster

• Reads external data sources and
publishes new Druid segments

• Is called Worker node

• Executes submitted tasks

• Forwards tasks to peons that run in
separate JVMs

• Peon
• Runs a single task in a single JVM

• Is managed by Middle Manager
WHAT HAS DOCKER DONE FOR US?
• Continuous delivery
- Deliver software more often and with less errors
- No time spent on dev-to-ops handoffs
• Improved Security
- Containers help isolate each part of your system and
provides better control of each component of your
system
• Run anything, anywhere
- All languages, all databases, all operating systems
- Any distribution, any cloud, any machine
• Reproducibility
- Reduces the times we say “it only worked on my
machine”
VMs vs. Containers
Source: https://www.docker.com/whatisdocker/
Containers are isolated, but
share OS and, where
appropriate, bins/libraries
WHAT DOES KUBERNETES DO?
• Kubernetes is an open-source system for automating
deployment, scaling, and management of
containerized applications.
• Improves reliability
-Continuously monitors and manages your containers
-Will scale your application to handle changes in load
• Better use of infrastructure resources
-Helps reduce infrastructure requirements by
gracefully scaling up and down your entire platform
• Coordinates what containers run where and when
across your system
Helm Architecture
Helm Client
gRPC RESTful
Chart

Repository
Kubernetes Cluster
App. App. App.
Helm
• Package manager for managing Kubernetes applications
• Helm Charts helps you define, install, and upgrade Kubernetes application
• Renders k8s manifest files and send them to k8s API => launch apps into the k8s cluster
…
K8S API ServerTiller Server
Docker
Image
Registry
* The basic chart format consists of the templates directory, values.yaml, and other files as below.
Auto Scaling in Druid
The Autoscaling mechanisms currently in place are tightly coupled with our deployment
infrastructure but the framework should be in place for other implementations. We are highly
open to new implementations or extensions of the existing mechanisms. In our own
deployments, middle manager nodes are Amazon AWS EC2 nodes and they are
provisioned to register themselves in a galaxy environment.

If autoscaling is enabled, new middle managers may be added when a task has been in
pending state for too long. Middle managers may be terminated if they have not run any
tasks for a period of time.
“
”
[Autoscaling, http://druid.io/docs/latest/design/overlord.html ]
Description of Auto Scaling in Druid
[EC2AutoScalar.java, https://github.com/apache/incubator-druid/blob/master/indexing-service/src/main/java/org/apache/druid/
indexing/overlord/autoscaling/ec2/EC2AutoScaler.java ]
public class EC2AutoScaler implements AutoScaler<EC2EnvironmentConfig>
{
...
@Override
public AutoScalingData provision() { ... }
...
@Override
public AutoScalingData terminate(List<String> ips) { ... }
...
}
Implementation of Auto Scaling in Druid
Horizontal Pods Auto
Scaling with Custom
Metrics on Kubernetes
Horizontal Pod Autoscaler
Deployment
ReplicaSet
Custom Metrics API
Prometheus
MiddleManager Pod
MiddleManager
Overlord

Watcher
MiddleManager Pod
MiddleManager
Overlord

Watcher
MiddleManager Pod
MiddleManager
Overlord

Watcher
…
/druid_ingestion_num_peons
/druid_ingestion_num_workers
/druid_ingestion_num_pending_tasks
/druid_ingestion_num_running_tasks
/druid_ingestion_expected_num_workers
/druid_ingestion_current_load
custom.metrics.k8s.io/v1beta1
Exposing Custom Metrics to Prometheus (Cont.)
Property Description
druid_ingestion_num_peons The number of peons for each worker
druid_ingestion_num_workers The number of workers in indexing service
druid_ingestion_num_pending_tasks The number of pending tasks in indexing service
druid_ingestion_num_running_tasks The number of running tasks in indexing service
druid_ingestion_expected_num_workers The number of expected workers in indexing service
druid_ingestion_current_load Percentage of current load
/druid/indexer/v1/workers
/druid/indexer/v1/pendingTasks
/druid/indexer/v1/runningTasks
HTTP endpoint of
Overlord process
1. RESTful HTTP request

2. Get JSON string

3. Parse the string and replace the property
current_load (%)

(=round(expected_numworkers / num_workers * 100))
0 100 200 100 300 150 350 175 100 200 175 175
expected_num_workers

(=int(math.ceil(expected_num_tasks / num_peons))
0 1 2 2 6 6 14 14 14 28 28 28
expected_num_tasks

(=num_pending_tasks + num_running_tasks)
0 2 14 14 46 46 112 112 112 222 222 222
num_peons

(=druid.worker.capacity of Middle Manager)
8
num_workers

(=The number of Middle Manager processes)
1 1 1 2 2 4 4 8 14 14 16 16
num_pending_tasks 0 0 6 0 30 14 80 48 0 110 94 94
num_running_tasks 0 2 8 14 16 32 32 64 112 112 128 128
num_incoming_tasks 2 12 0 32 0 66 0 0 110 0 0 0
* Metrics from Overlord process
* Calculated values using the metrics from Overlord process
minReplicas
maxReplicas
Set once at deployment
$ kubectl create namespace monitoring && kubectl create namespace demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create namespace monitoring && kubectl create namespace demo
namespace “monitoring” created
namespace "demo" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ helm install 
--name druid 
--namespace=demo 
--set service.externalIPs=50.1.100.121 
--set persistence.data.storageClass=local-disk5 
--set persistence.log.storageClass=local-disk6 
--set configs.hadoop.resourcePath=
resources/demo/conf/hadoop 
--set configs.druid.resourcePath=
resources/demo/conf/druid 
--set indexerLogs.hadoop.directory=/druid/logs 
--set storage.hadoop.directory=/druid/storage 
--set metadataStorage.mysql.uri=
jdbc:mysql://mysql-mysqlha-0.mysql-mysqlha:3306/druid?useSSL=false 
--set metadataStorage.mysql.user=druid 
--set metadataStorage.mysql.password=druid 
--set indexerTask.hadoopWorkingPath=/druid/indexing-tmp 
./incubator/druid
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n demo
NAME READY STATUS RESTARTS AGE
druid-broker-0 1/1 Running 0 1m
druid-coordinator-0 1/1 Running 0 1m
druid-historical-0 1/1 Running 0 1m
druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 1m
druid-overlord-0 1/1 Running 0 1m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Cloning into 'k8s-prom-hpa'...
remote: Counting objects: 153, done.
remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153
Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (70/70), done.
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Cloning into 'k8s-prom-hpa'...
remote: Counting objects: 153, done.
remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153
Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (70/70), done.
$ kubectl create -f ./prometheus
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Cloning into 'k8s-prom-hpa'...
remote: Counting objects: 153, done.
remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153
Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (70/70), done.
$ kubectl create -f ./prometheus
configmap "prometheus-config" created
deployment.apps "prometheus" created
clusterrole.rbac.authorization.k8s.io "prometheus" created
serviceaccount "prometheus" created
clusterrolebinding.rbac.authorization.k8s.io "prometheus" created
service "prometheus" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ make certs
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ make certs
Generating TLS certs
Generating a 2048 bit RSA private key
......................................+++
.......................+++
writing new private key to 'metrics-ca.key'
-----
2018/09/19 20:05:54 [INFO] generate received request
2018/09/19 20:05:54 [INFO] received CSR
2018/09/19 20:05:54 [INFO] generating key: rsa-2048
2018/09/19 20:05:55 [INFO] encoded CSR
2018/09/19 20:05:55 [INFO] signed certificate with serial number
369504685819654624616304590957348031615297503101
Generating custom-metrics-api/cm-adapter-serving-certs.yaml
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create -f ./custom-metrics-api
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create -f ./custom-metrics-api
secret "cm-adapter-serving-certs" created
clusterrolebinding.rbac.authorization.k8s.io "custom-metrics:system:auth-delegator"
created
rolebinding.rbac.authorization.k8s.io "custom-metrics-auth-reader" created
deployment.extensions "custom-metrics-apiserver" created
clusterrolebinding.rbac.authorization.k8s.io "custom-metrics-resource-reader" created
serviceaccount "custom-metrics-apiserver" created
service "custom-metrics-apiserver" created
apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" created
clusterrole.rbac.authorization.k8s.io "custom-metrics-server-resources" created
clusterrole.rbac.authorization.k8s.io "custom-metrics-resource-reader" created
clusterrolebinding.rbac.authorization.k8s.io "hpa-controller-custom-metrics" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n monitoring
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
custom-metrics-apiserver-7dd968d85-zhrhw 1/1 Running 0 1m
prometheus-7dff795b9f-5ltcn 1/1 Running 0 4m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
{
"kind": "APIResourceList",
"apiVersion": "v1",
"groupVersion": "custom.metrics.k8s.io/v1beta1",
"resources": [
{
"name": "persistentvolumeclaims/kubelet_volume_stats_inodes_free",
"singularName": "",
"namespaced": true,
"kind": "MetricValueList",
"verbs": [
"get"
]
},
{
"name": "namespaces/kube_statefulset_status_observed_generation",
"singularName": "",
"namespaced": false,
"kind": "MetricValueList",
"verbs": [
…
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create -f ./druid/middlemanager-hpa.yaml
Exploring Middle Manager Auto Scaling based on Custom Metrics
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
namespace: demo
name: druid-mm
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: druid-middlemanager
minReplicas: 1
maxReplicas: 16
metrics:
- type: Pods
pods:
metricName: druid_ingestion_current_load
targetAverageValue: 100
$ kubectl create -f ./druid/middlemanager-hpa.yaml
horizontalpodautoscaler.autoscaling "druid-mm" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m
$ kubectl get hpa -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 16 2m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw 
/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw 
/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/%2A/
druid_ingestion_current_load"
},
"items": [
{
"describedObject": {
"kind": "Pod",
"namespace": "demo",
"name": "druid-middlemanager-75558c5d65-242gh",
"apiVersion": "/__internal"
},
"metricName": "druid_ingestion_current_load",
"timestamp": "2019-02-26T22:53:38Z",
"value": “175"
},
…
}
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n demo
NAME READY STATUS RESTARTS AGE
druid-broker-0 1/1 Running 0 7m
druid-coordinator-0 1/1 Running 0 8m
druid-historical-0 1/1 Running 0 8m
druid-middlemanager-75558c5d65-242gh 2/2 Running 0 8m
druid-middlemanager-75558c5d65-5227p 2/2 Running 0 8m
druid-middlemanager-75558c5d65-5hrmp 2/2 Running 0 8m
druid-middlemanager-75558c5d65-5sdr8 2/2 Running 0 8m
druid-middlemanager-75558c5d65-889z5 2/2 Running 0 8m
druid-middlemanager-75558c5d65-8k22s 2/2 Running 0 8m
druid-middlemanager-75558c5d65-9nk2j 2/2 Running 0 8m
druid-middlemanager-75558c5d65-9zcj6 2/2 Running 0 8m
druid-middlemanager-75558c5d65-bzvjt 2/2 Running 0 8m
druid-middlemanager-75558c5d65-cvd82 2/2 Running 0 9m
druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 9m
druid-middlemanager-75558c5d65-fdpws 2/2 Running 0 9m
druid-middlemanager-75558c5d65-gapws 2/2 Running 0 9m
druid-middlemanager-75558c5d65-jjh6f 2/2 Running 0 9m
druid-middlemanager-75558c5d65-w7gbd2/2 Running 0 9m
druid-middlemanager-75558c5d65-ztb6h 2/2 Running 0 9m
druid-overlord-0 1/1 Running 0 7m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
Horizontal Pods Auto Scaling:
Scale-in issue and workarounds
Scale-in Issue
• Eviction of pods by random fashion while

• Web-server













• Druid Middle-manager









Horizontal Pod Auto-scaler
Ç Ç
Horizontal Pod Auto-scaler
Ç Ç
[replica_set.go, https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/replicaset/replica_set.go#L459 ]
Precedences Rules & Workaround
1. Unassigned < Assigned

2. Pending < Unknown < Running

3. Not ready < Ready
4. Ready for empty time < Less time < More time

5. Higher restart counts < Lower restart counts

6. Empty creation time pods < Newer pods < Older pods
Conclusion
Kubernetes Druid
Coverage
Any (private/public) Cloud
platform if Kubernetes is
available
AWS EC2
Start/Stop instance A few seconds only A few minutes
Ownership of auto-scaling
Decoupling from Druid core
source
Tightly coupled with Druid
core source
Extensibility
Easily extensible: Druid
Historical node and any
other applications
Not supports historical node
Who is the better controller for Druid Auto Scaling?

More Related Content

What's hot

Azure Data Platform Overview.pdf
Azure Data Platform Overview.pdfAzure Data Platform Overview.pdf
Azure Data Platform Overview.pdfDustin Vannoy
 
Using Spark Streaming and NiFi for the Next Generation of ETL in the Enterprise
Using Spark Streaming and NiFi for the Next Generation of ETL in the EnterpriseUsing Spark Streaming and NiFi for the Next Generation of ETL in the Enterprise
Using Spark Streaming and NiFi for the Next Generation of ETL in the EnterpriseDataWorks Summit
 
Real time stock processing with apache nifi, apache flink and apache kafka
Real time stock processing with apache nifi, apache flink and apache kafkaReal time stock processing with apache nifi, apache flink and apache kafka
Real time stock processing with apache nifi, apache flink and apache kafkaTimothy Spann
 
CDC patterns in Apache Kafka®
CDC patterns in Apache Kafka®CDC patterns in Apache Kafka®
CDC patterns in Apache Kafka®confluent
 
Hudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilitiesHudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilitiesNishith Agarwal
 
Change Data Feed in Delta
Change Data Feed in DeltaChange Data Feed in Delta
Change Data Feed in DeltaDatabricks
 
Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Araf Karsh Hamid
 
Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...
Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...
Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...HostedbyConfluent
 
Monitoring with Prometheus
Monitoring with PrometheusMonitoring with Prometheus
Monitoring with PrometheusShiao-An Yuan
 
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®confluent
 
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...Amazon Web Services
 
Apache Hudi: The Path Forward
Apache Hudi: The Path ForwardApache Hudi: The Path Forward
Apache Hudi: The Path ForwardAlluxio, Inc.
 
Running Apache NiFi with Apache Spark : Integration Options
Running Apache NiFi with Apache Spark : Integration OptionsRunning Apache NiFi with Apache Spark : Integration Options
Running Apache NiFi with Apache Spark : Integration OptionsTimothy Spann
 
Modularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache SparkModularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache SparkDatabricks
 
Building A Modern Data Analytics Architecture on AWS
Building A Modern Data Analytics Architecture on AWSBuilding A Modern Data Analytics Architecture on AWS
Building A Modern Data Analytics Architecture on AWSAmazon Web Services
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream ProcessingGuido Schmutz
 
The RED Method: How to monitoring your microservices.
The RED Method: How to monitoring your microservices.The RED Method: How to monitoring your microservices.
The RED Method: How to monitoring your microservices.Grafana Labs
 
Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...
Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...
Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...StreamNative
 

What's hot (20)

Azure Data Platform Overview.pdf
Azure Data Platform Overview.pdfAzure Data Platform Overview.pdf
Azure Data Platform Overview.pdf
 
Using Spark Streaming and NiFi for the Next Generation of ETL in the Enterprise
Using Spark Streaming and NiFi for the Next Generation of ETL in the EnterpriseUsing Spark Streaming and NiFi for the Next Generation of ETL in the Enterprise
Using Spark Streaming and NiFi for the Next Generation of ETL in the Enterprise
 
Real time stock processing with apache nifi, apache flink and apache kafka
Real time stock processing with apache nifi, apache flink and apache kafkaReal time stock processing with apache nifi, apache flink and apache kafka
Real time stock processing with apache nifi, apache flink and apache kafka
 
CDC patterns in Apache Kafka®
CDC patterns in Apache Kafka®CDC patterns in Apache Kafka®
CDC patterns in Apache Kafka®
 
Hudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilitiesHudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilities
 
Change Data Feed in Delta
Change Data Feed in DeltaChange Data Feed in Delta
Change Data Feed in Delta
 
Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics
 
kafka
kafkakafka
kafka
 
Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...
Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...
Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...
 
Apache flink
Apache flinkApache flink
Apache flink
 
Monitoring with Prometheus
Monitoring with PrometheusMonitoring with Prometheus
Monitoring with Prometheus
 
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
 
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
 
Apache Hudi: The Path Forward
Apache Hudi: The Path ForwardApache Hudi: The Path Forward
Apache Hudi: The Path Forward
 
Running Apache NiFi with Apache Spark : Integration Options
Running Apache NiFi with Apache Spark : Integration OptionsRunning Apache NiFi with Apache Spark : Integration Options
Running Apache NiFi with Apache Spark : Integration Options
 
Modularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache SparkModularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache Spark
 
Building A Modern Data Analytics Architecture on AWS
Building A Modern Data Analytics Architecture on AWSBuilding A Modern Data Analytics Architecture on AWS
Building A Modern Data Analytics Architecture on AWS
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream Processing
 
The RED Method: How to monitoring your microservices.
The RED Method: How to monitoring your microservices.The RED Method: How to monitoring your microservices.
The RED Method: How to monitoring your microservices.
 
Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...
Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...
Change Data Capture to Data Lakes Using Apache Pulsar and Apache Hudi - Pulsa...
 

Similar to Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes

Dok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on KubernetesDok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on KubernetesDoKC
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoopclairvoyantllc
 
PaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at YelpPaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at YelpNathan Handler
 
Clocker - How to Train your Docker Cloud
Clocker - How to Train your Docker CloudClocker - How to Train your Docker Cloud
Clocker - How to Train your Docker CloudAndrew Kennedy
 
Monitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECSMonitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECSAmazon Web Services
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with DockerMariaDB plc
 
KubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to ProdKubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to ProdSubhas Dandapani
 
Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Jakub Hajek
 
Improving Apache Spark Downscaling
 Improving Apache Spark Downscaling Improving Apache Spark Downscaling
Improving Apache Spark DownscalingDatabricks
 
'DOCKER' & CLOUD: ENABLERS For DEVOPS
'DOCKER' & CLOUD:  ENABLERS For DEVOPS'DOCKER' & CLOUD:  ENABLERS For DEVOPS
'DOCKER' & CLOUD: ENABLERS For DEVOPSACA IT-Solutions
 
Docker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-ITDocker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-ITStijn Wijndaele
 
20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on docker20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on dockerWei Ting Chen
 
What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?DataWorks Summit
 
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...Emerson Eduardo Rodrigues Von Staffen
 
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...Amazon Web Services
 
Migrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to AzureMigrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to AzureRevolution Analytics
 
Cloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit KubernetesCloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit KubernetesQAware GmbH
 
Migrating existing open source machine learning to azure
Migrating existing open source machine learning to azureMigrating existing open source machine learning to azure
Migrating existing open source machine learning to azureMicrosoft Tech Community
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB
 

Similar to Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes (20)

Dok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on KubernetesDok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on Kubernetes
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop
 
PaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at YelpPaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at Yelp
 
Clocker - How to Train your Docker Cloud
Clocker - How to Train your Docker CloudClocker - How to Train your Docker Cloud
Clocker - How to Train your Docker Cloud
 
Monitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECSMonitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECS
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with Docker
 
KubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to ProdKubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to Prod
 
Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0
 
Improving Apache Spark Downscaling
 Improving Apache Spark Downscaling Improving Apache Spark Downscaling
Improving Apache Spark Downscaling
 
'DOCKER' & CLOUD: ENABLERS For DEVOPS
'DOCKER' & CLOUD:  ENABLERS For DEVOPS'DOCKER' & CLOUD:  ENABLERS For DEVOPS
'DOCKER' & CLOUD: ENABLERS For DEVOPS
 
Docker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-ITDocker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-IT
 
20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on docker20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on docker
 
What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?
 
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
 
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
 
Migrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to AzureMigrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to Azure
 
Cloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit KubernetesCloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit Kubernetes
 
Power of Azure Devops
Power of Azure DevopsPower of Azure Devops
Power of Azure Devops
 
Migrating existing open source machine learning to azure
Migrating existing open source machine learning to azureMigrating existing open source machine learning to azure
Migrating existing open source machine learning to azure
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 

More from DataWorks Summit

Floating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisFloating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisDataWorks Summit
 
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFiTracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFiDataWorks Summit
 
HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...DataWorks Summit
 
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...DataWorks Summit
 
Managing the Dewey Decimal System
Managing the Dewey Decimal SystemManaging the Dewey Decimal System
Managing the Dewey Decimal SystemDataWorks Summit
 
Practical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist ExamplePractical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist ExampleDataWorks Summit
 
HBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at UberHBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at UberDataWorks Summit
 
Scaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and PhoenixScaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and PhoenixDataWorks Summit
 
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFiBuilding the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFiDataWorks Summit
 
Supporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability ImprovementsSupporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability ImprovementsDataWorks Summit
 
Security Framework for Multitenant Architecture
Security Framework for Multitenant ArchitectureSecurity Framework for Multitenant Architecture
Security Framework for Multitenant ArchitectureDataWorks Summit
 
Presto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything EnginePresto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything EngineDataWorks Summit
 
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...DataWorks Summit
 
Extending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google CloudExtending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google CloudDataWorks Summit
 
Event-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFiEvent-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFiDataWorks Summit
 
Securing Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache RangerSecuring Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache RangerDataWorks Summit
 
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...DataWorks Summit
 
Computer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near YouComputer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near YouDataWorks Summit
 
Big Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache SparkBig Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache SparkDataWorks Summit
 

More from DataWorks Summit (20)

Data Science Crash Course
Data Science Crash CourseData Science Crash Course
Data Science Crash Course
 
Floating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisFloating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache Ratis
 
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFiTracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
 
HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...
 
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
 
Managing the Dewey Decimal System
Managing the Dewey Decimal SystemManaging the Dewey Decimal System
Managing the Dewey Decimal System
 
Practical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist ExamplePractical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist Example
 
HBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at UberHBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at Uber
 
Scaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and PhoenixScaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and Phoenix
 
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFiBuilding the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFi
 
Supporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability ImprovementsSupporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability Improvements
 
Security Framework for Multitenant Architecture
Security Framework for Multitenant ArchitectureSecurity Framework for Multitenant Architecture
Security Framework for Multitenant Architecture
 
Presto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything EnginePresto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything Engine
 
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
 
Extending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google CloudExtending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google Cloud
 
Event-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFiEvent-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFi
 
Securing Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache RangerSecuring Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache Ranger
 
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
 
Computer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near YouComputer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near You
 
Big Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache SparkBig Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
 

Recently uploaded

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 

Recently uploaded (20)

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 

Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes

  • 1. Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes Jinchul Kim
  • 2. About Jinchul • DevOps engineer and Senior Software Developer at SK Telecom (2017 ~ ) • Scrum master for cloud platform development using Kubernetes, Docker, and a variety of applications • Committer of Apache Impala Project (2018 ~) • SAP HANA in-memory engine at SAP Labs Korea (2008 ~ 2017) • Designed, wrote server-side code by using C++: SQL/SQLScript parser, semantic analyzer, SQL optimizer, rule/ cost based optimization, plan explanation and executor, SQL plan cache, and SQLScript debugger • Received "SAP Applaud Award" for strategic contribution with impact across teams/functions and overcame significant challenges on HANA scale-out quality
  • 3. • Motivation • Background & terminology • Apache Kafka • Apache Druid • Docker & Kubernetes • Helm • Auto Scaling in Druid • Horizontal Pods Auto Scaling with Custom Metrics on Kubernetes • Horizontal Pods Auto Scaling: Scale-in issue and workarounds • Conclusion Agenda
  • 4. Motivation • Why do we need auto-scaling? • Cost saving by resource management • What kinds of information do we need for auto-scaling? • Hardware resource metrics • Custom metrics from service
  • 5. Motivation (Cont.) • Drawbacks in auto-scaling feature of Apache Druid • Druid's auto scaling is only available in AWS • A few minutes for start-up and shutdown of VMs • Druid's auto scaling is tightly coupled with AWS API
  • 7. [Overview of Apache Kafka — By Ch.ko123 — Own work, CC BY 4.0, 
 https://commons.wikimedia.org/w/index.php?curid=59871096]
  • 12. • Overlord • Assigns ingestion tasks to Middle Managers • Is a controller of data ingestion into Druid • Watches over Middle Managers • Coordinates segment publishing • Middle Manager • Processes handle ingestion of new data into the cluster • Reads external data sources and publishes new Druid segments • Is called Worker node • Executes submitted tasks • Forwards tasks to peons that run in separate JVMs • Peon • Runs a single task in a single JVM • Is managed by Middle Manager
  • 13. WHAT HAS DOCKER DONE FOR US? • Continuous delivery - Deliver software more often and with less errors - No time spent on dev-to-ops handoffs • Improved Security - Containers help isolate each part of your system and provides better control of each component of your system • Run anything, anywhere - All languages, all databases, all operating systems - Any distribution, any cloud, any machine • Reproducibility - Reduces the times we say “it only worked on my machine”
  • 14. VMs vs. Containers Source: https://www.docker.com/whatisdocker/ Containers are isolated, but share OS and, where appropriate, bins/libraries
  • 15. WHAT DOES KUBERNETES DO? • Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. • Improves reliability -Continuously monitors and manages your containers -Will scale your application to handle changes in load • Better use of infrastructure resources -Helps reduce infrastructure requirements by gracefully scaling up and down your entire platform • Coordinates what containers run where and when across your system
  • 16. Helm Architecture Helm Client gRPC RESTful Chart
 Repository Kubernetes Cluster App. App. App. Helm • Package manager for managing Kubernetes applications • Helm Charts helps you define, install, and upgrade Kubernetes application • Renders k8s manifest files and send them to k8s API => launch apps into the k8s cluster … K8S API ServerTiller Server Docker Image Registry
  • 17. * The basic chart format consists of the templates directory, values.yaml, and other files as below.
  • 19. The Autoscaling mechanisms currently in place are tightly coupled with our deployment infrastructure but the framework should be in place for other implementations. We are highly open to new implementations or extensions of the existing mechanisms. In our own deployments, middle manager nodes are Amazon AWS EC2 nodes and they are provisioned to register themselves in a galaxy environment. If autoscaling is enabled, new middle managers may be added when a task has been in pending state for too long. Middle managers may be terminated if they have not run any tasks for a period of time. “ ” [Autoscaling, http://druid.io/docs/latest/design/overlord.html ] Description of Auto Scaling in Druid
  • 20. [EC2AutoScalar.java, https://github.com/apache/incubator-druid/blob/master/indexing-service/src/main/java/org/apache/druid/ indexing/overlord/autoscaling/ec2/EC2AutoScaler.java ] public class EC2AutoScaler implements AutoScaler<EC2EnvironmentConfig> { ... @Override public AutoScalingData provision() { ... } ... @Override public AutoScalingData terminate(List<String> ips) { ... } ... } Implementation of Auto Scaling in Druid
  • 21. Horizontal Pods Auto Scaling with Custom Metrics on Kubernetes
  • 22. Horizontal Pod Autoscaler Deployment ReplicaSet Custom Metrics API Prometheus MiddleManager Pod MiddleManager Overlord
 Watcher MiddleManager Pod MiddleManager Overlord
 Watcher MiddleManager Pod MiddleManager Overlord
 Watcher … /druid_ingestion_num_peons /druid_ingestion_num_workers /druid_ingestion_num_pending_tasks /druid_ingestion_num_running_tasks /druid_ingestion_expected_num_workers /druid_ingestion_current_load custom.metrics.k8s.io/v1beta1
  • 23.
  • 24. Exposing Custom Metrics to Prometheus (Cont.) Property Description druid_ingestion_num_peons The number of peons for each worker druid_ingestion_num_workers The number of workers in indexing service druid_ingestion_num_pending_tasks The number of pending tasks in indexing service druid_ingestion_num_running_tasks The number of running tasks in indexing service druid_ingestion_expected_num_workers The number of expected workers in indexing service druid_ingestion_current_load Percentage of current load /druid/indexer/v1/workers /druid/indexer/v1/pendingTasks /druid/indexer/v1/runningTasks HTTP endpoint of Overlord process 1. RESTful HTTP request
 2. Get JSON string
 3. Parse the string and replace the property
  • 25. current_load (%)
 (=round(expected_numworkers / num_workers * 100)) 0 100 200 100 300 150 350 175 100 200 175 175 expected_num_workers
 (=int(math.ceil(expected_num_tasks / num_peons)) 0 1 2 2 6 6 14 14 14 28 28 28 expected_num_tasks
 (=num_pending_tasks + num_running_tasks) 0 2 14 14 46 46 112 112 112 222 222 222 num_peons
 (=druid.worker.capacity of Middle Manager) 8 num_workers
 (=The number of Middle Manager processes) 1 1 1 2 2 4 4 8 14 14 16 16 num_pending_tasks 0 0 6 0 30 14 80 48 0 110 94 94 num_running_tasks 0 2 8 14 16 32 32 64 112 112 128 128 num_incoming_tasks 2 12 0 32 0 66 0 0 110 0 0 0 * Metrics from Overlord process * Calculated values using the metrics from Overlord process minReplicas maxReplicas Set once at deployment
  • 26. $ kubectl create namespace monitoring && kubectl create namespace demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 27. $ kubectl create namespace monitoring && kubectl create namespace demo namespace “monitoring” created namespace "demo" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 28. $ helm install --name druid --namespace=demo --set service.externalIPs=50.1.100.121 --set persistence.data.storageClass=local-disk5 --set persistence.log.storageClass=local-disk6 --set configs.hadoop.resourcePath= resources/demo/conf/hadoop --set configs.druid.resourcePath= resources/demo/conf/druid --set indexerLogs.hadoop.directory=/druid/logs --set storage.hadoop.directory=/druid/storage --set metadataStorage.mysql.uri= jdbc:mysql://mysql-mysqlha-0.mysql-mysqlha:3306/druid?useSSL=false --set metadataStorage.mysql.user=druid --set metadataStorage.mysql.password=druid --set indexerTask.hadoopWorkingPath=/druid/indexing-tmp ./incubator/druid Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 29. $ kubectl get pods -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 30. $ kubectl get pods -n demo NAME READY STATUS RESTARTS AGE druid-broker-0 1/1 Running 0 1m druid-coordinator-0 1/1 Running 0 1m druid-historical-0 1/1 Running 0 1m druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 1m druid-overlord-0 1/1 Running 0 1m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 31. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 32. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Cloning into 'k8s-prom-hpa'... remote: Counting objects: 153, done. remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153 Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done. $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 33. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Cloning into 'k8s-prom-hpa'... remote: Counting objects: 153, done. remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153 Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done. $ kubectl create -f ./prometheus Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 34. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Cloning into 'k8s-prom-hpa'... remote: Counting objects: 153, done. remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153 Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done. $ kubectl create -f ./prometheus configmap "prometheus-config" created deployment.apps "prometheus" created clusterrole.rbac.authorization.k8s.io "prometheus" created serviceaccount "prometheus" created clusterrolebinding.rbac.authorization.k8s.io "prometheus" created service "prometheus" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 35. $ make certs Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 36. $ make certs Generating TLS certs Generating a 2048 bit RSA private key ......................................+++ .......................+++ writing new private key to 'metrics-ca.key' ----- 2018/09/19 20:05:54 [INFO] generate received request 2018/09/19 20:05:54 [INFO] received CSR 2018/09/19 20:05:54 [INFO] generating key: rsa-2048 2018/09/19 20:05:55 [INFO] encoded CSR 2018/09/19 20:05:55 [INFO] signed certificate with serial number 369504685819654624616304590957348031615297503101 Generating custom-metrics-api/cm-adapter-serving-certs.yaml $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 37. $ kubectl create -f ./custom-metrics-api Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 38. $ kubectl create -f ./custom-metrics-api secret "cm-adapter-serving-certs" created clusterrolebinding.rbac.authorization.k8s.io "custom-metrics:system:auth-delegator" created rolebinding.rbac.authorization.k8s.io "custom-metrics-auth-reader" created deployment.extensions "custom-metrics-apiserver" created clusterrolebinding.rbac.authorization.k8s.io "custom-metrics-resource-reader" created serviceaccount "custom-metrics-apiserver" created service "custom-metrics-apiserver" created apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" created clusterrole.rbac.authorization.k8s.io "custom-metrics-server-resources" created clusterrole.rbac.authorization.k8s.io "custom-metrics-resource-reader" created clusterrolebinding.rbac.authorization.k8s.io "hpa-controller-custom-metrics" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 39. $ kubectl get pods -n monitoring Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 40. $ kubectl get pods -n monitoring NAME READY STATUS RESTARTS AGE custom-metrics-apiserver-7dd968d85-zhrhw 1/1 Running 0 1m prometheus-7dff795b9f-5ltcn 1/1 Running 0 4m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 41. $ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq . Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 42. $ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq . { "kind": "APIResourceList", "apiVersion": "v1", "groupVersion": "custom.metrics.k8s.io/v1beta1", "resources": [ { "name": "persistentvolumeclaims/kubelet_volume_stats_inodes_free", "singularName": "", "namespaced": true, "kind": "MetricValueList", "verbs": [ "get" ] }, { "name": "namespaces/kube_statefulset_status_observed_generation", "singularName": "", "namespaced": false, "kind": "MetricValueList", "verbs": [ … Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 43. $ kubectl create -f ./druid/middlemanager-hpa.yaml Exploring Middle Manager Auto Scaling based on Custom Metrics apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: namespace: demo name: druid-mm spec: scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: druid-middlemanager minReplicas: 1 maxReplicas: 16 metrics: - type: Pods pods: metricName: druid_ingestion_current_load targetAverageValue: 100
  • 44. $ kubectl create -f ./druid/middlemanager-hpa.yaml horizontalpodautoscaler.autoscaling "druid-mm" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 45. $ kubectl get hpa -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 46. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 47. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 48. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 49. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m $ kubectl get hpa -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 50. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 16 2m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 51. $ kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 52. $ kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load { "kind": "MetricValueList", "apiVersion": "custom.metrics.k8s.io/v1beta1", "metadata": { "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/%2A/ druid_ingestion_current_load" }, "items": [ { "describedObject": { "kind": "Pod", "namespace": "demo", "name": "druid-middlemanager-75558c5d65-242gh", "apiVersion": "/__internal" }, "metricName": "druid_ingestion_current_load", "timestamp": "2019-02-26T22:53:38Z", "value": “175" }, … } $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 53. $ kubectl get pods -n demo NAME READY STATUS RESTARTS AGE druid-broker-0 1/1 Running 0 7m druid-coordinator-0 1/1 Running 0 8m druid-historical-0 1/1 Running 0 8m druid-middlemanager-75558c5d65-242gh 2/2 Running 0 8m druid-middlemanager-75558c5d65-5227p 2/2 Running 0 8m druid-middlemanager-75558c5d65-5hrmp 2/2 Running 0 8m druid-middlemanager-75558c5d65-5sdr8 2/2 Running 0 8m druid-middlemanager-75558c5d65-889z5 2/2 Running 0 8m druid-middlemanager-75558c5d65-8k22s 2/2 Running 0 8m druid-middlemanager-75558c5d65-9nk2j 2/2 Running 0 8m druid-middlemanager-75558c5d65-9zcj6 2/2 Running 0 8m druid-middlemanager-75558c5d65-bzvjt 2/2 Running 0 8m druid-middlemanager-75558c5d65-cvd82 2/2 Running 0 9m druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 9m druid-middlemanager-75558c5d65-fdpws 2/2 Running 0 9m druid-middlemanager-75558c5d65-gapws 2/2 Running 0 9m druid-middlemanager-75558c5d65-jjh6f 2/2 Running 0 9m druid-middlemanager-75558c5d65-w7gbd2/2 Running 0 9m druid-middlemanager-75558c5d65-ztb6h 2/2 Running 0 9m druid-overlord-0 1/1 Running 0 7m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 54. Horizontal Pods Auto Scaling: Scale-in issue and workarounds
  • 55. Scale-in Issue • Eviction of pods by random fashion while • Web-server
 
 
 
 
 
 
 • Druid Middle-manager
 
 
 
 
 Horizontal Pod Auto-scaler Ç Ç Horizontal Pod Auto-scaler Ç Ç
  • 56.
  • 57. [replica_set.go, https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/replicaset/replica_set.go#L459 ] Precedences Rules & Workaround 1. Unassigned < Assigned 2. Pending < Unknown < Running 3. Not ready < Ready 4. Ready for empty time < Less time < More time 5. Higher restart counts < Lower restart counts 6. Empty creation time pods < Newer pods < Older pods
  • 58. Conclusion Kubernetes Druid Coverage Any (private/public) Cloud platform if Kubernetes is available AWS EC2 Start/Stop instance A few seconds only A few minutes Ownership of auto-scaling Decoupling from Druid core source Tightly coupled with Druid core source Extensibility Easily extensible: Druid Historical node and any other applications Not supports historical node Who is the better controller for Druid Auto Scaling?