Event Plugin Deployment (Kafka)
This page gives the instructions for deploying the Kafka Event Subscription plugin. Content contains: plugin compilation, Kafka deployment and event subscription examples.
Recommended Configuration
- CPU/ RAM: 16Core / 32G
- DISK: 500G+
- System: Ubuntu / CentOS 64
1. Compile Kafka event plugin
git clone https://github.com/tronprotocol/event-plugin.git
cd event-plugin
./gradlew build
You can find plugin-kafka-1.0.0.zip in the event-plugin/build/plugins/ directory after compilation.
2. Deploy Kafka
Install Kafka
Linux:
cd /usr/local
wget https://downloads.apache.org/kafka/2.8.0/kafka_2.13-2.8.0.tgz
$ tar -xzf kafka_2.13-2.8.0.tgz
Start Kafka
Linux:
cd /usr/local/kafka_2.13-2.8.0
// start the ZooKeeper service
$ bin/zookeeper-server-start.sh config/zookeeper.properties &
// start the Kafka broker service
$ bin/kafka-server-start.sh config/server.properties &
3. Event Subscription
3.1 event subscribe configuration
Add items of 'event.plugin' to the configuration file of your fullnode to support event subscription with Kafka.
3.1.1 Plugin Configurations
event.subscribe = {
native = {
useNativeQueue = false// if true, use native message queue, else use event plugin.
bindport = 5555 // bind port
sendqueuelength = 1000 //max length of send queue
}
path = "" // absolute path of plugin
server = "" // target server address to receive event triggers
dbconfig = "" // dbname|username|password
contractParse = true,
…………
…………
}
- The item 'native' contains configurations for TRON's built-in message queue. Please always keep 'useNativeQueue' as 'false' to subscribe events with Kafka.
- 'path' is the local path for 'plugin-kafka-1.0.0.zip'. Please ensure the path is correct.
- 'server' is Kafka's server address in the format of IP:port, default port is 9092. Please use the correct port number and ensure that the Kafka service is accessible.
- 'dbconfig' is for MongoDB. Ignore it.
3.1.2 Event Subscription Configuration Items
TRON Event Subscription supports seven types of events. They are: 'block', 'transaction', 'contractevent', 'contractlog', 'solidity', 'solidityevent' and 'soliditylog'.
Subscription of too many topics will cause performance degradation. Please subscribe 1-2 types of events according to your needs.
Take the block event subscription as an example:
topics = [
{
triggerName = "block" // block trigger, the value can't be modified
enable = true
topic = "block" // plugin topic, the value could be modified
}
]
- triggerName: Built-in field. Can't be changed.
- enable: Set as 'true' to subscribe the event of 'block'
- topic: This field corresponds to the pre-created topic in Kafka. The topic name can either be default or customised.
The item of 'filter' works as the filter for subscribed events. For accurate subscription, according to your needs, you can customise the block range(fromblock ~ toblock), contract address(contractAddress) and specific contract topic(contractTopic) .
filter = {
fromblock = "" // the value could be "", "earliest" or a specified block number as the beginning of the queried range
toblock = "" // the value could be "", "latest" or a specified block number as end of the queried range
contractAddress = [
"" // contract address you want to subscribe, if it's set to "", you will receive contract logs/events with any contract address.
]
contractTopic = [
"" // contract topic you want to subscribe, if it's set to "", you will receive contract logs/events with any contract topic.
]
}
3.2 Create Subscription Topics in Kafka
The name of the Kafka subscription topic should be consistent with the configuration item in 3.1.2. E.g., To subscribe event 'block', please set 'topic' as 'block' in 'block trigger' and create topic 'block' in Kafka to receive 'block' events.
Linux:
bin/kafka-topics.sh --create --topic block --bootstrap-server localhost:9092
3.3 Start an Event Subscription Node
After completing the above configuration, please start your fullnode with '--es' to turn on the event subscription.
java -jar FullNode.jar -c config.conf --es
Check tron.log to see whether the Kafka Event Plugin has been successfully loaded.
grep -i eventplugin logs/tron.log
The loading is successful when this reminder displayed:
[o.t.c.l.EventPluginLoader] 'your plugin path/plugin-kafka-1.0.0.zip' loaded
3.4 Event Subscription Queries
Execute kafka-console-consumer.sh script to get messages of topic 'block' in Kafka.
Linux:
bin/kafka-console-consumer.sh --topic block --from-beginning --bootstrap-server localhost:9092
You have successfully subscribed to the events when the following appears:
{
"timeStamp": 1539973125000,
"triggerName": "blockTrigger",
"blockNumber": 3341315,
"blockHash": "000000000032fc03440362c3d42eb05e79e8a1aef77fe31c7879d23a750f2a31",
"transactionSize": 16,
"latestSolidifiedBlockNumber": 3341297,
"transactionList": ["8757f846e541b51b5692a2370327f4b8031125f4557f8ad4b1037d4452616d39", "f6adab7814b34e5e756170f93a31a0c3393c5d99eff11e30271916375adc7467", ..., "89bcbcd063a48ef4a5678a033acf5edbb6b17419a3c91eb0479a3c8598774b43"]
}
…………
Updated over 3 years ago