Skip to main content

Produce Messages Using REST API

info

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.