In this tutorial we’ll be walking through step-by-step instructions on getting a Kafka service up and running. This tutorial assumes you’ve already setup a local cluster using the Quick Start guide and that you’re in the VM environment.
Steps:
-
Change directory into
dcos-commonsand create a new service by running:cd /dcos-commons && ./new-framework.sh examples/kafka. This will create a clone of thehello-worldservice which you should then modify. -
Next change directory to where the Kafka service definition is:
cd examples/kafka/src/main/dist/ -
With an editor of your choice open
svc.yml. Notice that some values, such asNODE_COUNTandFRAMEWORK_CPUSare mustached.[0] -
The name of a task can be anything but since Kafka has brokers, change the type of the task in the Kafka pod from
nodetobroker. Also, notice thatcountis specified as a property of thekafkapod. This indicates there will becountkafka pods, each of which will run abroker. -
Next, add the following property to the
brokertask in order to open up the necessary port, and mark it asadvertised so that it appears in service endpoint information.
ports:
broker-port:
port: 9092
advertise: true
- Now, let’s modify the command that will start each
broker. This is also a property of thebrokertask:
cmd: "env && exec $MESOS_SANDBOX/kafka_2.11-0.10.0.0/bin/kafka-server-start.sh $MESOS_SANDBOX/kafka_2.11-0.10.0.0/config/server.properties"
- Adding this under
kafkafor eachbrokerwill fetch the Kafka binary in order to execute the above command:
uris:
- "https://downloads.mesosphere.com/kafka/assets/kafka_2.11-0.10.0.0.tgz"
- The following property allows for custom configuration of each
broker:
configs:
server-properties:
template: server.properties.mustache
dest: kafka_2.11-0.10.0.0/config/server.properties
- Save and exit the
svc.ymlfile. It should look similar to the following:
name: {{FRAMEWORK_NAME}}
scheduler:
service_account: {{FRAMEWORK_PRINCIPAL}}
user: {{FRAMEWORK_USER}}
pods:
kafka:
count: {{NODE_COUNT}}
placement: '{{{NODE_PLACEMENT}}}'
uris:
- "https://downloads.mesosphere.com/kafka/assets/kafka_2.11-0.10.0.0.tgz"
tasks:
broker:
goal: RUNNING
cmd: "env && exec $MESOS_SANDBOX/kafka_2.11-0.10.0.0/bin/kafka-server-start.sh $MESOS_SANDBOX/kafka_2.11-0.10.0.0/config/server.properties"
cpus: {{NODE_CPUS}}
memory: {{NODE_MEM}}
ports:
broker-port:
port: 9092
advertise: true
volume:
path: "kafka-container-path"
type: {{NODE_DISK_TYPE}}
size: {{NODE_DISK}}
env:
SLEEP_DURATION: {{SLEEP_DURATION}}
configs:
server-properties:
template: server.properties.mustache
dest: kafka_2.11-0.10.0.0/config/server.properties
The server.properties.mustache should live in the current directory (dcos-commons/examples/kafka/src/main/dist).
- Download the
server.properties.mustachefile mentioned above:curl -O https://raw.githubusercontent.com/mesosphere/dcos-commons/29c38ea81948c8fe550a9d77974f78155c318815/frameworks/kafka/src/main/dist/server.properties.mustache > server.properties.mustache - Next, create the symlink that’s required to get the unit tests to pass and confirm that it’s created:
cd ../resources && ln -s ../dist/server.properties.mustache && ls -l - Run the following command from the root directory of the service:
cd /dcos-commons/examples/kafka && ./build.sh localDepending on your implementation, you may need to configure
ln -s /usr/bin/sha1sum /usr/bin/shasum - Now, install the service via
dcos package install kafkaand visit your dashboard to see Kafka running: http://172.17.0.2/#/services/%2Fkafka/
[0] The mustaching provides support for dynamically updating a service’s configuration at runtime.