Bird
Raised Fist0
Kafkadevops~10 mins

Amazon MSK in Kafka - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a Kafka producer that sends a message to an MSK topic.

Kafka
from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers='[1]')
producer.send('my-topic', b'Hello MSK!')
producer.flush()
Drag options to blanks, or click blank then click option'
Ab-1.mskcluster.example.com:9092
Blocalhost:9092
C127.0.0.1:2181
Dmsk-cluster:2181
Attempts:
3 left
💡 Hint
Common Mistakes
Using localhost or 127.0.0.1 instead of the actual MSK broker endpoint.
Using the ZooKeeper port 2181 instead of the Kafka broker port 9092.
2fill in blank
medium

Complete the code to consume messages from an MSK topic named 'orders'.

Kafka
from kafka import KafkaConsumer

consumer = KafkaConsumer('orders', bootstrap_servers='[1]', auto_offset_reset='earliest')
for message in consumer:
    print(message.value.decode('utf-8'))
Drag options to blanks, or click blank then click option'
Alocalhost:9092
Bzookeeper.msk.local:2181
Cb-2.mskcluster.example.com:9092
Dmsk-broker:2181
Attempts:
3 left
💡 Hint
Common Mistakes
Using ZooKeeper address instead of Kafka broker address.
Using localhost when connecting to a remote MSK cluster.
3fill in blank
hard

Fix the error in the code to configure the Kafka producer with SSL for MSK.

Kafka
producer = KafkaProducer(bootstrap_servers='b-1.mskcluster.example.com:9092', security_protocol='[1]', ssl_cafile='/path/to/ca.pem')
Drag options to blanks, or click blank then click option'
ASASL_SSL
BSSL
CSASL_PLAINTEXT
DPLAINTEXT
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'PLAINTEXT' disables encryption.
Using SASL options without proper SASL configuration.
4fill in blank
hard

Fill both blanks to create a Kafka consumer that uses SASL authentication with MSK.

Kafka
consumer = KafkaConsumer('logs', bootstrap_servers='b-3.mskcluster.example.com:9092', security_protocol='[1]', sasl_mechanism='[2]', sasl_plain_username='user', sasl_plain_password='pass')
Drag options to blanks, or click blank then click option'
ASASL_SSL
BSASL_PLAINTEXT
CPLAIN
DGSSAPI
Attempts:
3 left
💡 Hint
Common Mistakes
Using PLAINTEXT or SASL_PLAINTEXT disables encryption.
Using GSSAPI without Kerberos setup.
5fill in blank
hard

Fill all three blanks to produce a dictionary comprehension that maps topic partitions to their latest offsets in MSK.

Kafka
offsets = { [1]: [2] for [3] in consumer.assignment() }
Drag options to blanks, or click blank then click option'
Apartition
Bconsumer.position(partition)
Doffset
Attempts:
3 left
💡 Hint
Common Mistakes
Using undefined variables.
Confusing partition and offset roles.

Practice

(1/5)
1. What is the main benefit of using Amazon MSK for Kafka users?
easy
A. It manages Kafka servers for you, so you don't have to.
B. It replaces Kafka with a different messaging system.
C. It requires you to manually configure all Kafka brokers.
D. It only works with AWS Lambda functions.

Solution

  1. Step 1: Understand Amazon MSK's purpose

    Amazon MSK is a managed service that runs Kafka clusters for you.
  2. Step 2: Compare options with MSK features

    Only It manages Kafka servers for you, so you don't have to. correctly states that MSK manages Kafka servers, removing manual server management.
  3. Final Answer:

    It manages Kafka servers for you, so you don't have to. -> Option A
  4. Quick Check:

    Managed Kafka service = It manages servers [OK]
Hint: Remember MSK means managed Kafka servers [OK]
Common Mistakes:
  • Thinking MSK replaces Kafka
  • Assuming manual server setup is needed
  • Believing MSK only works with Lambda
2. Which of the following is the correct way to specify the bootstrap servers when connecting to an Amazon MSK cluster in Kafka client configuration?
easy
A. "localhost:9092"
B. "msk://cluster-endpoint"
C. "127.0.0.1:2181"
D. "b-1.mskcluster.abcd1234.kafka.us-east-1.amazonaws.com:9092,b-2.mskcluster.abcd1234.kafka.us-east-1.amazonaws.com:9092"

Solution

  1. Step 1: Identify MSK cluster endpoints format

    Amazon MSK provides bootstrap servers as DNS names with ports, like in "b-1.mskcluster.abcd1234.kafka.us-east-1.amazonaws.com:9092,b-2.mskcluster.abcd1234.kafka.us-east-1.amazonaws.com:9092".
  2. Step 2: Eliminate incorrect formats

    "localhost:9092" is localhost, not MSK. "127.0.0.1:2181" is Zookeeper port, not Kafka. "msk://cluster-endpoint" is not a valid Kafka bootstrap server format.
  3. Final Answer:

    "b-1.mskcluster.abcd1234.kafka.us-east-1.amazonaws.com:9092,b-2.mskcluster.abcd1234.kafka.us-east-1.amazonaws.com:9092" -> Option D
  4. Quick Check:

    MSK bootstrap servers = DNS names with ports [OK]
Hint: MSK bootstrap servers are DNS names with port 9092 [OK]
Common Mistakes:
  • Using localhost instead of MSK endpoints
  • Confusing Zookeeper port with Kafka port
  • Using invalid URI schemes like msk://
3. Given the following Kafka producer code snippet connecting to Amazon MSK, what will be the output if the message is sent successfully?
producer.send(new ProducerRecord<>("my-topic", "key1", "Hello MSK"));
System.out.println("Message sent successfully");
medium
A. Error: Connection refused
B. Message sent successfully
C. No output
D. Message failed to send

Solution

  1. Step 1: Understand producer.send behavior

    The send method is asynchronous but the print statement runs immediately after.
  2. Step 2: Check output after send call

    Since no error handling is shown and send is called, the print statement will output "Message sent successfully".
  3. Final Answer:

    Message sent successfully -> Option B
  4. Quick Check:

    Producer send + print = Message sent successfully [OK]
Hint: Print after send shows success unless exception thrown [OK]
Common Mistakes:
  • Assuming send blocks until confirmed
  • Expecting error without exception handling
  • Thinking no output means success
4. You have this Kafka consumer code connecting to Amazon MSK:
Properties props = new Properties();
props.put("bootstrap.servers", "b-1.mskcluster.kafka:9092");
props.put("group.id", "test-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("my-topic"));
consumer.poll(Duration.ofMillis(100));
The consumer throws a runtime error about deserializer class not found. What is the likely cause?
medium
A. The topic name is invalid.
B. The bootstrap server address is wrong.
C. The deserializer class names are incorrect or misspelled.
D. The group.id property is missing.

Solution

  1. Step 1: Analyze the error message

    The error says deserializer class not found, so the problem is with deserializer class names.
  2. Step 2: Check deserializer class names in code

    They must be fully qualified and spelled exactly. Any typo causes class not found error.
  3. Final Answer:

    The deserializer class names are incorrect or misspelled. -> Option C
  4. Quick Check:

    Deserializer class error = wrong class name [OK]
Hint: Check spelling of deserializer class names first [OK]
Common Mistakes:
  • Ignoring class name typos
  • Assuming bootstrap server causes deserializer error
  • Missing group.id but error is about deserializer
5. You want to create a Kafka consumer in Java that connects to an Amazon MSK cluster and only processes messages with keys starting with "user-". Which approach correctly applies this filter after receiving messages?
hard
A. Use a Kafka Streams application with a filter on the key prefix.
B. Set the consumer property "key.filter.prefix" to "user-".
C. Subscribe only to topics named "user-*".
D. Configure the producer to send only keys starting with "user-".

Solution

  1. Step 1: Understand Kafka consumer filtering options

    Kafka consumers do not support filtering by key prefix via configuration properties.
  2. Step 2: Identify correct filtering method

    Kafka Streams allows processing and filtering messages by key prefix programmatically.
  3. Step 3: Evaluate other options

    There is no Kafka consumer property like "key.filter.prefix". Subscribing to topics named "user-*" filters by topic name, not message keys. Producer configuration controls what is sent, not what the consumer processes.
  4. Final Answer:

    Use a Kafka Streams application with a filter on the key prefix. -> Option A
  5. Quick Check:

    Filter keys after consuming = Kafka Streams filter [OK]
Hint: Filter keys in Kafka Streams, not consumer config [OK]
Common Mistakes:
  • Expecting consumer config to filter keys
  • Filtering by topic name instead of message key
  • Trying to filter on producer side only
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard