If you do not have a Kafka cluster and/or topic already, follow these
steps to create one.
In the cluster details section of the
Upstash Console, scroll down the REST API
section and and copy UPSTASH_KAFKA_REST_URL
, UPSTASH_KAFKA_REST_USERNAME
and
UPSTASH_KAFKA_REST_PASSWORD
using the copy icons next to them.
We will use a Node.js
sample code to show how to produce message(s) using the
REST API. Our sample will use a topic named cities
and send a few city names
to this topic.
Replace following parameters in the code snippets below with your actual values.
const address = "https://tops-stingray-7863-eu1-rest-kafka.upstash.io";
const user = "G9wcy1zdGluZ3JheS03ODYzJMUX";
const pass = "eUmYCkAlxEhihIc7Hooi2IA2pz2fw==";
const auth = Buffer.from(`${user}:${pass}`).toString("base64");
const topic = "cities";
Following code will produce three city names to a topic:
async function produce(topic, msg) {
const response = await fetch(`${address}/produce/${topic}/${msg}`, {
headers: { Authorization: `Basic ${auth}` },
});
const metadata = await response.json();
console.log(
`Topic: ${metadata.topic}, Partition: ${metadata.partition}, Offset: ${metadata.offset}`
);
}
produce(topic, "Tokyo");
produce(topic, "Istanbul");
produce(topic, "London");
Alternatively we can post all cities using a single request, instead of
producing them one-by-one. Note that in this case, URL does not have the message
argument but instead all messages are posted in the request body.
async function produceMulti(topic, ...messages) {
let data = messages.map((msg) => {
return { value: msg };
});
const response = await fetch(`${address}/produce/${topic}`, {
headers: { Authorization: `Basic ${auth}` },
method: "POST",
body: JSON.stringify(data),
});
const metadata = await response.json();
metadata.forEach((m) => {
console.log(
`Topic: ${m.topic}, Partition: ${m.partition}, Offset: ${m.offset}`
);
});
}
produceMulti(topic, "Tokyo", "Istanbul", "London");
For more info about using the REST API see
Kafka REST Produce API section.