@oriolrius/node-red-contrib-kafka
Version:
Node-RED Kafka nodes: Send, Receive, and Schema validation with modern KafkaJS
219 lines (165 loc) • 5.6 kB
Markdown
# Migration Guide: kafka-node to kafkajs
This document outlines the migration from `kafka-node` to `kafkajs` in the EdgeFlow Kafka Client Node-RED library.
## Overview
The library has been migrated from the `kafka-node` library to `kafkajs` for the following benefits:
- **Better Performance**: kafkajs is more modern and performant
- **Active Maintenance**: kafkajs is actively maintained while kafka-node is deprecated
- **Better Error Handling**: Improved error reporting and debugging capabilities
- **Modern JavaScript**: Uses async/await patterns for better code readability
- **Better TypeScript Support**: If you use TypeScript in your Node-RED environment
## Breaking Changes
### 1. Message Format Changes
**Before (kafka-node):**
```javascript
// Consumer message format
{
topic: "my-topic",
partition: 0,
offset: 12345,
key: null,
value: "message content",
timestamp: "2020-08-19T08:58:27.866Z"
}
```
**After (kafkajs):**
```javascript
// Consumer message format (unchanged for compatibility)
{
topic: "my-topic",
partition: 0,
offset: "12345", // Note: offset is now a string
key: null,
value: "message content",
timestamp: "1597829907866" // Unix timestamp as string
}
```
### 2. Configuration Changes
#### Broker Configuration
**Before:**
- Used `kafkaHost` format: `"host1:9092,host2:9092"`
**After:**
- Now uses `brokers` array internally: `["host1:9092", "host2:9092"]`
- **No change needed in UI** - the same comma-separated format is still supported
#### SSL Configuration
**Before:**
```javascript
sslOptions: {
ca: [fs.readFileSync(path)],
cert: [fs.readFileSync(path)],
key: [fs.readFileSync(path)]
}
```
**After:**
```javascript
ssl: {
ca: fs.readFileSync(path), // No array wrapper
cert: fs.readFileSync(path), // No array wrapper
key: fs.readFileSync(path) // No array wrapper
}
```
### 3. Producer Changes
**Before:**
- Used callback-based `producer.send([options], callback)`
- Required `requireAcks` and `ackTimeoutMs` options
**After:**
- Uses async/await pattern
- Maps compression attributes to kafkajs compression types
- Better error handling with detailed error messages
### 4. Consumer Changes
**Before:**
- Event-based consumer with `connect`, `message`, `error` events
- Used `ConsumerGroup` class
**After:**
- Uses async/await pattern with `consumer.run({ eachMessage })`
- Automatic reconnection handling
- Better subscription management
## What Stays the Same
### 1. Node-RED Interface
- All UI elements remain exactly the same
- Same configuration options in the Node-RED editor
- Same visual appearance and behavior
### 2. IoT Features
- IoT cloud configuration works identically
- Field mapping and message transformation unchanged
- All IoT-specific functionality preserved
### 3. SASL Authentication
- Same SASL mechanisms supported: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
- Same configuration interface
### 4. TLS/SSL Support
- Same certificate configuration
- Same file path inputs for CA, client cert, and private key
## Migration Steps
### For Existing Users
1. **Update the Package**
```bash
npm update @edgeflow/kafka-client
```
2. **No Configuration Changes Required**
- Existing flows will continue to work
- No need to reconfigure nodes
3. **Check Debug Logs**
- Debug messages may have slightly different formats
- Look for new `[Kafka Broker]`, `[Kafka Producer]`, `[Kafka Consumer]` prefixes
### For Developers
1. **Update Dependencies**
```json
{
"dependencies": {
"kafkajs": "^2.2.4"
}
}
```
2. **Review Error Handling**
- Error messages may be more detailed
- Check any custom error handling code
## Performance Improvements
### Connection Management
- Faster initial connections
- Better connection pooling
- Improved reconnection logic
### Message Processing
- Lower memory usage
- Better throughput for high-volume scenarios
- Improved batch processing
### Error Recovery
- More robust error handling
- Better retry mechanisms
- Improved connection stability
## Troubleshooting
### Common Issues After Migration
1. **Offset Format**
- Offsets are now strings instead of numbers
- Update any code that performs numeric operations on offsets
2. **Timestamp Format**
- Timestamps are Unix timestamps as strings
- Convert to Date objects if needed: `new Date(parseInt(timestamp))`
3. **Connection Errors**
- Check debug logs for more detailed error information
- kafkajs provides better error descriptions
### Debug Information
Enable debug logging to see detailed information:
```javascript
// In Node-RED settings.js
logging: {
console: {
level: "debug",
metrics: false,
audit: false
}
}
```
Look for these debug message patterns:
- `[Kafka Broker] Creating connection options for brokers: ...`
- `[Kafka Producer] Producer ready and connected to Kafka broker`
- `[Kafka Consumer] Successfully connected to Kafka broker`
## Support
If you encounter issues after the migration:
1. Check the debug logs for detailed error information
2. Verify your Kafka broker version compatibility
3. Test with a simple producer-consumer setup first
4. Report issues on the GitHub repository with debug logs
## Version Compatibility
- **Node.js**: Requires Node.js >=14.6.0 (unchanged)
- **Node-RED**: Requires Node-RED >=3.0.0 (unchanged)
- **Kafka**: Compatible with Kafka 0.10+ (improved compatibility)
The migration maintains backward compatibility while providing better performance and reliability for your Kafka integration in Node-RED.