enn-egg-kafka
Version:
egg kafka plugin base kafkajs module
159 lines (137 loc) • 4.2 kB
Markdown
[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][codecov-image]][codecov-url]
[![David deps][david-image]][david-url]
[![Known Vulnerabilities][snyk-image]][snyk-url]
[![npm download][download-image]][download-url]
[]: https://img.shields.io/npm/v/egg-enn-egg-kafka.svg?style=flat-square
[]: https://npmjs.org/package/enn-egg-kafka
[]: https://img.shields.io/travis/eggjs/egg-enn-egg-kafka.svg?style=flat-square
[]: https://travis-ci.org/eggjs/egg-enn-egg-kafka
[]: https://img.shields.io/codecov/c/github/eggjs/egg-enn-egg-kafka.svg?style=flat-square
[]: https://codecov.io/github/eggjs/egg-enn-egg-kafka?branch=master
[]: https://img.shields.io/david/eggjs/egg-enn-egg-kafka.svg?style=flat-square
[]: https://david-dm.org/eggjs/egg-enn-egg-kafka
[]: https://snyk.io/test/npm/egg-enn-egg-kafka/badge.svg?style=flat-square
[]: https://snyk.io/test/npm/egg-enn-egg-kafka
[]: https://img.shields.io/npm/dm/egg-enn-egg-kafka.svg?style=flat-square
[]: https://npmjs.org/package/enn-egg-kafka
<!--
Description here.
-->
enn-egg-kafka 版本 | egg 1.x
--- | ---
1.x | 😁
0.x | ❌
<!--
如果有依赖其它插件,请在这里特别说明。如
- security
- multipart
-->
```js
// config/plugin.js
exports.kafka = {
enable: true,
package: 'enn-egg-kafka',
};
```
- 对[kafkajs](https://www.npmjs.com/package/kafkajs)模块封装的eggjs插件
- 配置 `config/config.default.js`
```js
config.kafka = {
client: {
clientId: 'broker-data-sync',
brokers: ['10.0.3.42:9092'],
consumer: {
groupId: 'group-test',
},
producer: {
allowAutoTopicCreation: true,
},
},
afterReady: false,
};
```
其中afterReady为新增字段,设置为true后,等待端口启动完成,再启动插件,其他配置字段详见 https://kafka.js.org/docs/getting-started
```js
/*
* 生产消息
*/
await app.kafka.producerSend('topic-enn-rd', [{ key: 'key2111', value: 'hey hey!1111' }])
/*
committed offset when starting to fetch messages. If the offset is invalid or not defined, fromBeginning defines the behavior of the consumer group. This can be configured when subscribing to a topic.
//When fromBeginning is true, the group will use the earliest offset. If set to false, it will use the latest offset. The default is false.
/*
* 消费消息-单条 fromBeginning默认为true,从commit后的offset开始消费
*/
await app.kafka.consumerInit('test_topic');
app.kafka.consumer.run({
eachMessage: async ({
topic,
partition,
message,
heartbeat
}) => {
const data = {
partition,
topic,
key: message.key.toString(),
value: message.value.toString(),
headers: message.headers,
timestamp: message.timestamp,
offset: message.offset,
};
if (message.extra) {
data.extra = message.extra.toString();
}
console.log(message)
}
});
/*
* 消费消息-批量
*/
await app.kafka.consumerInit('test_topic');
app.kafka.consumer.run({
eachBatchAutoResolve: true,
eachBatch: async ({
batch,
resolveOffset,
heartbeat,
commitOffsetsIfNecessary,
uncommittedOffsets,
isRunning,
isStale,
}) => {
const datas = [];
for (let message of batch.messages) {
console.log(message)
const data = {
topic: batch.topic,
partition: batch.partition,
highWatermark: batch.highWatermark,
message: {
offset: message.offset,
key: message.key.toString(),
value: message.value.toString(),
headers: message.headers,
}
};
if (message.extra) {
data.extra = message.extra.toString();
}
resolveOffset(message.offset);
await heartbeat();
}
},
})
```
[](LICENSE)