kfk
Version:
The high-level node kafka client based on node-rdkafka .
68 lines (62 loc) • 2.07 kB
JavaScript
const _ = require('lodash')
const Kafka = require('node-rdkafka')
function random(len) {
const possible = 'abcdefghijklmnopqrstuvwxyz'
return _.sampleSize(possible, len).join('')
}
const main = async () => {
console.log('start')
const topic = 'rdkafka-test0'
const seed = random(12)
const consumer = new Kafka.KafkaConsumer({
'group.id': `raw-consumer-commit-xxxx`,
'metadata.broker.list': '127.0.0.1:9092',
'enable.auto.offset.store': false,
'enable.auto.commit': false,
'rebalance_cb': function (err, assignment) {
if (err.code === Kafka.CODES.ERRORS.ERR__ASSIGN_PARTITIONS) {
// Note: this can throw when you are disconnected. Take care and wrap it in
// a try catch if that matters to you
let rebalance_log = 'consumer rebalance : '
for (const assign of assignment) {
rebalance_log += `{topic ${assign.topic}, partition: ${assign.partition}} `
}
console.log(rebalance_log)
this.assign(assignment)
} else if (err.code == Kafka.CODES.ERRORS.ERR__REVOKE_PARTITIONS) {
// Same as above
this.unassign();
} else {
// We had a real error
console.error(err);
}
}
}, {
'auto.offset.reset': 'earliest',
})
consumer.connect()
consumer.on('error', function (err) {
console.log('error')
})
consumer.on('ready', async function () {
consumer.subscribe([
topic,
])
while (true) {
await new Promise((resolve, reject) => {
consumer.consume(1, (err, messages) => {
if (messages.length === 0) {
console.log('empty messages')
return resolve()
}
const message = messages[0]
console.log(`topic: ${message.topic} offset : ${message.offset} partition : ${message.partition} val: ${message.value.toString('utf-8')}`)
console.log('hit bottom offset', messages[messages.length - 1].offset)
consumer.commitMessageSync(message)
resolve(message)
})
})
}
})
}
main()