umami/kafka/sessionProducer.js
2022-08-01 00:28:38 -07:00

80 lines
2.1 KiB
JavaScript

// import the `Kafka` instance from the kafkajs library
const { Kafka } = require('kafkajs');
// the client ID lets kafka know who's producing the messages
const clientId = 'my-app';
// we can define the list of brokers in the cluster
const brokers = ['localhost:9092', 'localhost:9093', 'localhost:9094'];
// this is the topic to which we want to write messages
const topic = 'session';
// initialize a new kafka client and initialize a producer from it
const kafka = new Kafka({ clientId, brokers });
const { Partitioners } = require('kafkajs');
const producer = kafka.producer({ createPartitioner: Partitioners.DefaultPartitioner });
// we define an async function that writes a new message each second
async function produce_session() {
await producer.connect();
let i = 0;
// after the produce has connected, we start an interval timer
setInterval(async () => {
try {
// send a message to the configured topic with
// the key and value formed from the current value of `i`
let y = Math.random()
.toString(36)
.replace(/[^a-z]+/g, '')
.substr(0, 5);
let z = Math.random()
.toString(36)
.replace(/[^a-z]+/g, '')
.substr(0, 5);
const x = {
session_uuid: '00fea66e-a433-536d-a13d-2d873fab0a08',
website_id: i,
hostname: z,
browser: y,
os: z,
device: y,
screen: z,
language: y,
country: z,
};
await producer.send({
topic,
messages: [
{
key: 'my-key',
value: JSON.stringify(x),
},
{
key: 'my-key',
value: JSON.stringify(x),
},
{
key: 'my-key',
value: JSON.stringify(x),
},
{
key: 'my-key',
value: JSON.stringify(x),
},
{
key: 'my-key',
value: JSON.stringify(x),
},
],
});
i++;
} catch (err) {
console.error('could not write message ' + err);
}
}, 4);
}
module.exports = produce_session;