Giter Site home page Giter Site logo

sintef-9012 / kafka-mqtt-source-connector Goto Github PK

View Code? Open in Web Editor NEW
22.0 11.0 16.0 69 KB

A connector plugin to use with Kafka's Connect API. It can be configured to map any topic from an mqtt broker to any topic on the Kafka broker. The connector can be configured to use SSL in communication with the mqtt broker.

License: MIT License

Java 100.00%
kafka mqtt

kafka-mqtt-source-connector's Introduction

kafka-mqtt-source-connector

A connector plugin to use with Kafka's Connect API. It can be configured to map any topic from an mqtt broker to any topic on the Kafka broker. The connector can be configured to use SSL in communication with the mqtt broker.

Setting up a single Zookeeper and Kafka instance

To be able to test the connector, we first need to set up the Kafka infrastructure. For simplicity, we start by configuring single nodes (one Zookeeper and one Kafka).

Prerequisites

  • Java version >8 installed to run Kafka and this source-connector. Check if Java is installed, and which version by running java -version in your terminal. We use openjdk version "11.0.6" 2020-01-14.
  • Linux. We are running this setup on Ubuntu 16.4.
  • A mqtt-broker. We use EMQX
  • Maven. Check if maven is installed properly with running mvn -v in your terminal. We use Maven 3.6.0

Mqtt Broker - EMQX

  • Download EMQX from https://www.emqx.io/downloads
  • Extract the download to your desired destination, here termed "path-to-emqx".
  • Run the following command in your terminal to start the EMQX broker:
"path-to-emqx"/emqx/bin/emqx start
  • Check that EMQX is running with the following terminal command:
"path-to-emqx"/emqx/bin/emqx_ctl status

Download Kafka binaries

Download a binary Kafka release from https://kafka.apache.org/downloads. We work with the compressed download:

kafka_2.13-2.4.1.tgz Extract the download to your desired destination, here termed "path-to-kafka".

Zookeeper

About Zookeeper:

"Zookeeper is a top-level software developed by Apache that acts as a centralized service and is used to maintain naming and configuration data and to provide flexible and robust synchronization within distributed systems. Zookeeper keeps track of status of the Kafka cluster nodes and it also keeps track of Kafka topics, partitions etc. Zookeeper it self is allowing multiple clients to perform simultaneous reads and writes and acts as a shared configuration service within the system. The Zookeeper atomic broadcast (ZAB) protocol i s the brains of the whole system, making it possible for Zookeeper to act as an atomic broadcast system and issue orderly updates." Cloudkarafka

Start Zookeeper

"path-to-kafka"/kafka_2.13-2.4.1/bin/zookeeper-server-start.sh "path-to-kafka"/kafka_2.13-2.4.1/config/zookeeper.properties

P.S. The default properties of zookeeper.properties works well for this tutorial's purpose. It will start Zookeeper on the default port 2181.

Kafka Broker

As mentioned, we will only kick up a single instance Kafka Broker. The Kafka Broker will use "path-to-kafka"/kafka_2.13-2.4.1/config/server.properties, and it could be worth checking that

zookeeper.connect=localhost:2181

or set according to your custom configuration in zookeeper.properties.

Start Kafka Broker

"path-to-kafka"/kafka_2.13-2.4.1/bin/kafka-server-start.sh "path-to-kafka"/kafka_2.13-2.4.1/config/server.properties

Create Kafka Topic

"path-to-kafka"/kafka_2.13-2.4.1/bin/kafka-topics --create --bootstrap-server 127.0.0.1:9092 --replication-factor 1 --partitions 1 --topic test

Kafka Connect

The Kafka Connect API is what we utilise as a framework around our connectors, to handle scaling, polling from Kafka, work distribution etc. Kafka Connect can run as connect-standalone or as connect-distributed. The connect-standalone is engineered for demo and test purposes, as it cannot provide fallback in a production environment.

Start Kafka Connect Follow the respective steps below to start Kafka Connect in preferred mode.

Connect in general Build this java maven project, but navigating to root kafka-mqtt-source-connector in a terminal and typing:

mvn install

Copy the kafka-mqtt-source-connector-"version".jar from your maven target directory to the directory /usr/share/java/kafka:

sudo mkdir /usr/share/java/kafka
sudo cp ./target/*with-dependencies.jar /usr/share/java/kafka/.

Insecure - using tcp Connect Standalone

  1. Uncomment plugin.path in "path-to-kafka"/kafka_2.13-2.4.1/config/connect-standalone.properties, so that it is set to
plugin.path=/usr/share/java,/usr/local/share/kafka/plugins,/usr/local/share/java/
  1. Copy the accompanying source connector properties file in this repository, source-connect-mqtt.properties, to "path-to-kafka"/kafka_2.13-2.4.1/config/ (or create a new properties file with the same name in the given directory).
  2. Ensure the following configuration in source-connect-mqtt.properties:
name=mqtt-source-connector
tasks.max=1
connector.class=com.sintef.asam.MqttSourceConnector
mqtt.connector.broker.uri=tcp://0.0.0.0:1883
mqtt.connector.broker.topic=test/#
mqtt.conncetor.kafka.topic=test

where mqtt.connector.broker.topic sets the topic one wants to subscribe to in the mqtt broker, while mqtt.connector.kafka.topic sets the topic for publishing to the Kafka broker. The mqtt.connector.broker.uri needs to be set according to your own mqtt broker, but the default for mosquitto and emqx will be the abovementioned.

  1. Start Connect Standalone with our connector by typing (this may take a minute or two):
"path-to-kafka"/kafka_2.13-2.4.1/bin/connect-standalone.sh "path-to-kafka"/kafka_2.13-2.4.1/config/connect-standalone.properties "path-to-kafka"/kafka_2.13-2.4.1/config/source-connect-mqtt.properties

Connect Distributed Kafka Connect Distributed does not need properties files to configure connectors. It uses the Kafka Connect REST-interface.

  1. Uncomment plugin.path in "path-to-kafka"/kafka_2.13-2.4.1/config/connect-distributed.properties, so that it is set to
plugin.path=/usr/share/java,/usr/local/share/kafka/plugins,/usr/local/share/java/

and that rest.port so that it is set to

rest.port=19005

which will help one to avoid some "bind" exceptions. This will be the port for the Connect REST-interface.

  1. Start Connect Distributed with by typing (this may take a minute or two):
"path-to-kafka"/kafka_2.13-2.4.1/bin/connect-distributed.sh "path-to-kafka"/kafka_2.13-2.4.1/config/connect-distributed.properties
  1. Start our connector by posting the following command to the Connect REST-interface:
curl -s -X POST -H 'Content-Type: application/json' http://127.0.0.1:19005/connectors -d '{"name":"mqtt-source-connector","config":{"connector.class":"com.sintef.asam.MqttSourceConnector","tasks.max":"1","mqtt.connector.broker.uri":"tcp://localhost:1883", "mqtt.connector.broker.topic":"test/#","mqtt.connector.kafka.topic":"test"}}'
  1. Inspect the terminal where you started Conncet Distributed, and after the connector seem to have successfully started, check the existence by typing:
curl 'Content-Type: application/json' http://127.0.0.1:19005/connectors

where the response is an array with connectors by name.

  1. Test the connector by making a Kafka Consumer subscribing to the topic test:
Documents/confluent-5.4.0/bin/kafka-console-consumer --bootstrap-server 127.0.0.1:9092 --topic test
  1. Then publish something to the test topic on your EMQX broker, using e.g. mosquitto:
mosquitto_pub -h 127.0.0.1 -p 1883 -t test -m "Hello, world!"

and see the message appear base64 encoded to your Kafka Consumer.

Secure - using SSL

Setting up your own certificate authority (for test purposes) and configure MQTT broker to use SSL

We first need certificates and keys to encrypt our secure socket layer (SSL) communication to and from the broker. To make your own certificate authority, and to create a client certificate and a client key, this provides very thorough and instructive guide: https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/

Let us assume that you have a /home/CA.crt, a /home/client.crt and a /home/client.key, we configure our EMQX broker by finding the configuration file "path-to-emqx"/etc/emqx.conf and setting/uncommenting the following properties:

listener.ssl.external = 8883
listener.ssl.external.access.1 = allow all
listener.ssl.external.keyfile = /home/client.key
listener.ssl.external.certfile = /home/client.cert
listener.ssl.external.cacertfile = /home/CA.cert

Then restart your mqtt broker.

Connect Distributed 12. Delete the previous made connector using TCP, if one is running, using the following call to the Connect REST-interface:

curl -X DELETE 'Content-Type: application/json' http://127.0.0.1:19005/connectors/mqtt-source-connector

if your connector was named mqtt-source-connector. Check running connectors by name using:

curl 'Content-Type: application/json' http://127.0.0.1:19005/connectors
  1. Copy your CA certificate, client certificate and client key to desired directory. In our test case we have the full paths /home/ca.crt, /home/client.crt and /home/client.key.
  2. Start our connector by posting the following command to the Connect REST-interface:
curl -s -X POST -H 'Content-Type: application/json' http://127.0.0.1:19005/connectors -d '{"name":"mqtt-source-connector","config":{"connector.class":"com.sintef.asam.MqttSourceConnector","tasks.max":"1","mqtt.connector.broker.uri":"ssl://localhost:8883", "mqtt.connector.broker.topic":"test/#", "mqtt.connector.kafka.topic":"test","mqtt.connector.ssl":true, "mqtt.connector.ssl.ca":"/home/ca.crt/","mqtt.connector.ssl.crt":"/home/client.crt","mqtt.connector.ssl.key":"/home/client.key"}}'
  1. Test the connector by making a Kafka Consumer subscribing to the topic test:
Documents/confluent-5.4.0/bin/kafka-console-consumer --bootstrap-server 127.0.0.1:9092 --topic test
  1. Then publish something to the test topic on your EMQX broker, using e.g. mosquitto:
mosquitto_pub --url mqtts://127.0.0.1:8883/test --cafile /home/ca.crt --cert /home/client.crt --key /home/client.key --insecure --tls-version tlsv1.2 -m "Hello, world!"

and see the message appear base64 encoded to your Kafka Consumer.

kafka-mqtt-source-connector's People

Contributors

asmhug avatar brice-morin avatar karlsv avatar nguyenhongphu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kafka-mqtt-source-connector's Issues

Configuration help

Hi,

Thanks for sharing your code.

I am trying to test your kafka connectors but I think I am missing something on configuration. I am following your instructions on README.md

I am using:
Mac OS Big Sur
Emqx 4.2.7
Kafka 2.7.0

I am getting this error, standalone and distributed, when trying to send message through mqtt clients.

Mosquitto
$ mosquitto_pub -t 'test' -m 'helloWorld'

I tested other mqtt clients, mqttjs and paho.

[2021-02-11 21:22:06,029] INFO WorkerSourceTask{id=mqtt-source-connector-0} Source task finished initialization and start (org.apache.kafka.connect.runtime.WorkerSourceTask:233)
ERROR MqttSourceConnectorTask ERROR: Not able to create source record from mqtt message 'Hello synchronous world!' arrived on topic 'test' for client 'kafka_source_connector'.
ERROR MqttSourceConnectorTask org.bson.json.JsonParseException: JSON reader was expecting a value but found 'Hello'.
org.bson.json.JsonParseException: JSON reader was expecting a value but found 'Hello'.
at org.bson.json.JsonReader.readBsonType(JsonReader.java:268)
at org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:680)
at org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:722)
at org.bson.AbstractBsonReader.readStartDocument(AbstractBsonReader.java:450)
at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:161)
at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:45)
at org.bson.Document.parse(Document.java:110)
at org.bson.Document.parse(Document.java:95)
at com.sintef.asam.MqttSourceConnectorTask.makeDBDoc(MqttSourceConnectorTask.java:157)
at com.sintef.asam.MqttSourceConnectorTask.messageArrived(MqttSourceConnectorTask.java:126)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:513)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:416)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:213)
at java.base/java.lang.Thread.run(Thread.java:832)

I searched google for help and changed Key and Value converters. Tried Json, String and ByteArray with no success.

Key Value converters
key.converter=org.apache.kafka.connect.storage.StringConverter
value.converter=org.apache.kafka.connect.converters.ByteArrayConverter

key.converter.schemas.enable=false
value.converter.schemas.enable=false

Testing Producer
$ kafka-console-producer --broker-list localhost:9092 --topic test < message.txt

Testing Consumer
$ kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning -property print.key=true
null Kafka test producer

Connectors
$ curl -s -XGET http://localhost:19005/connector-plugins|jq '.[].class'
"com.sintef.asam.MqttSinkConnector"
"com.sintef.asam.MqttSourceConnector"
"org.apache.kafka.connect.file.FileStreamSinkConnector"
"org.apache.kafka.connect.file.FileStreamSourceConnector"
"org.apache.kafka.connect.mirror.MirrorCheckpointConnector"
"org.apache.kafka.connect.mirror.MirrorHeartbeatConnector"
"org.apache.kafka.connect.mirror.MirrorSourceConnector"

$ curl --header "Content-Type: application/json" http://127.0.0.1:19005/connectors
["mqtt-source-connector"]%

$ curl -s -X POST -H "Content-Type: application/json" http://127.0.0.1:19005/connectors -d '{"name":"mqtt-source-connector","config":{"connector.class":"com.sintef.asam.MqttSourceConnector","tasks.max":"1","mqtt.connector.broker.uri":"tcp://localhost:1883", "mqtt.connector.broker.topic":"test/#","mqtt.connector.kafka.topic":"test"}}'
{"error_code":409,"message":"Connector mqtt-source-connector already exists"}%

$ kafka-topics --list --zookeeper localhost:2181
__consumer_offsets
connect-configs
connect-offsets
connect-status
position-reports
test
test-kafka
test1
test2
upstream

Can you help me?

Thanks

About this example

Does this example require commercial components of EMQX?
Is the open source version enough?

I setup according to the procedure specified in "Insecure - using tcp Connect Standalone". But It does not work.

I setup according to the procedure specified in "Insecure - using tcp Connect Standalone".
But It does not work.
The content of the error message is as follows

=================
mosquitto_pub -h 127.0.0.1 -p 1883 -t test -m "Hello, world!"

ERROR MqttSourceConnectorTask ERROR: Not able to create source record from mqtt message 'Hello, world!' arrived on topic 'test' for client 'kafka_source_connector'.
ERROR MqttSourceConnectorTask org.bson.json.JsonParseException: JSON reader was expecting a value but found 'Hello'.
org.bson.json.JsonParseException: JSON reader was expecting a value but found 'Hello'.
at org.bson.json.JsonReader.readBsonType(JsonReader.java:268)
at org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:680)
at org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:722)
at org.bson.AbstractBsonReader.readStartDocument(AbstractBsonReader.java:450)
at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:161)
at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:45)
at org.bson.Document.parse(Document.java:110)
at org.bson.Document.parse(Document.java:95)
at com.sintef.asam.MqttSourceConnectorTask.makeDBDoc(MqttSourceConnectorTask.java:157)
at com.sintef.asam.MqttSourceConnectorTask.messageArrived(MqttSourceConnectorTask.java:126)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:513)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:416)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:213)
at java.base/java.lang.Thread.run(Thread.java:829)

=================
mosquitto_pub -h localhost -t test -m "{"id":1234,"message":"This is a test"}"

ERROR MqttSourceConnectorTask ERROR: Not able to create source record from mqtt message '{"id":1234,"message":"This is a test"}' arrived on topic 'test' for client 'kafka_source_connector'.
ERROR MqttSourceConnectorTask java.lang.ArrayIndexOutOfBoundsException: Index 21 out of bounds for length 1
java.lang.ArrayIndexOutOfBoundsException: Index 21 out of bounds for length 1
at java.base/java.util.Arrays$ArrayList.get(Arrays.java:4351)
at com.sintef.asam.MqttSourceConnectorTask.makeDBDoc(MqttSourceConnectorTask.java:160)
at com.sintef.asam.MqttSourceConnectorTask.messageArrived(MqttSourceConnectorTask.java:126)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:513)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:416)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:213)
at java.base/java.lang.Thread.run(Thread.java:829)

Array out of bounds error

This code seems to depend on a very specific message format and cant seem to find documentation on it.

ERROR MqttSourceConnectorTask ERROR: Not able to create source record from mqtt message '{
"msg": "test event 6"
}' arrived on topic 'dev-events' for client 'kafka_source_connector'.
ERROR MqttSourceConnectorTask java.lang.ArrayIndexOutOfBoundsException: Index 21 out of bounds for length 1
java.lang.ArrayIndexOutOfBoundsException: Index 21 out of bounds for length 1
at java.base/java.util.Arrays$ArrayList.get(Arrays.java:4351)
at com.sintef.asam.MqttSourceConnectorTask.makeDBDoc(MqttSourceConnectorTask.java:160)
at com.sintef.asam.MqttSourceConnectorTask.messageArrived(MqttSourceConnectorTask.java:126)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:513)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:416)
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:213)
at java.base/java.lang.Thread.run(Thread.java:829)

It does not work!

Maybe nobody has ever tried it but... it doesn't work.
The attached examples don't work either... and a quick look at the code shows why:

    private String makeDBDoc(byte[] payload, String topic) {
      String msg = new String(payload);
      Document message = Document.parse(msg);
      Document doc = new Document();
      List<String> topicArr = Arrays.asList(topic.split("/"));
      Long unique_id = Long.parseLong(topicArr.get(21));
      Long quadkey = Long.parseLong(String.join("",topicArr.subList(2,20)));
      String now = ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT);
      Document dt = new Document();
      dt.put("$date",now);
      doc.put("message",message);
      doc.put("unique_id",unique_id);
      doc.put("quadkey",quadkey);
      doc.put("updateDate",dt);
      doc.put("pushed",false);
      return doc.toJson();
    }

with a code written in this way... with numbers thrown in this way... is it possible to have at least a description of the json that it interprets?

Thank you!

Not working for me

i followed all ur steps but no luck for me, can i have your contact to talk about this please its kinda urgent to me ♥

getting Started

  1. I think in the step of creating topic

    "path-to-kafka" /kafka_2.13-2.4.1/bin/kafka-topics
    

    should be changed to

    "path-to-kafka" /kafka_2.13-2.4.1/ bin / kafka-topics.sh
    

    and the -p parameter can be added when creating the / usr / share / java / kafka directory

I need help

problem

1. My system environment

Mint19.3

jdk1.8

2.

The first run was successful. When I restarted the computer, running connect-distributed.sh would get stuck. I do n’t know why.I completely followed the introductory tutorial and my configuration is correct.

root@jiayuan:/home/jiayuan# jps
23936 ConnectDistributed
22082 Kafka
21476 QuorumPeerMain
28454 Jps

Below is the output of running connect-distributed.sh , I cannot open port 19005.

[2020-04-12 19:46:30,128] INFO WorkerInfo values: 
	jvm.args = -Xms256M, -Xmx2G, -XX:+UseG1GC, -XX:MaxGCPauseMillis=20, -XX:InitiatingHeapOccupancyPercent=35, -XX:+ExplicitGCInvokesConcurrent, -Djava.awt.headless=true, -Dcom.sun.management.jmxremote, -Dcom.sun.management.jmxremote.authenticate=false, -Dcom.sun.management.jmxremote.ssl=false, -Dkafka.logs.dir=/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../logs, -Dlog4j.configuration=file:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../config/connect-log4j.properties
	jvm.spec = Oracle Corporation, Java HotSpot(TM) 64-Bit Server VM, 1.8.0_231, 25.231-b11
	jvm.classpath = .:/home/jiayuan/apps/jdk1.8.0_231/lib:/home/jiayuan/apps/jdk1.8.0_231/jre/lib:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/activation-1.1.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/aopalliance-repackaged-2.5.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/argparse4j-0.7.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/audience-annotations-0.5.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/commons-cli-1.4.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/commons-lang3-3.8.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-api-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-basic-auth-extension-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-file-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-json-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-mirror-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-mirror-client-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-runtime-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/connect-transforms-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/guava-20.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/hk2-api-2.5.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/hk2-locator-2.5.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/hk2-utils-2.5.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-annotations-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-core-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-databind-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-dataformat-csv-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-datatype-jdk8-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-jaxrs-base-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-jaxrs-json-provider-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-module-jaxb-annotations-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-module-paranamer-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jackson-module-scala_2.13-2.10.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jakarta.activation-api-1.2.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jakarta.annotation-api-1.3.4.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jakarta.inject-2.5.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jakarta.ws.rs-api-2.1.5.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jakarta.xml.bind-api-2.3.2.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/javassist-3.22.0-CR2.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/javax.servlet-api-3.1.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/javax.ws.rs-api-2.1.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jaxb-api-2.3.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jersey-client-2.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jersey-common-2.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jersey-container-servlet-2.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jersey-container-servlet-core-2.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jersey-hk2-2.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jersey-media-jaxb-2.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jersey-server-2.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-client-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-continuation-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-http-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-io-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-security-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-server-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-servlet-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-servlets-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jetty-util-9.4.20.v20190813.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/jopt-simple-5.0.4.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka_2.13-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka_2.13-2.4.1-sources.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka-clients-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka-log4j-appender-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka-streams-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka-streams-examples-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka-streams-scala_2.13-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka-streams-test-utils-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/kafka-tools-2.4.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/log4j-1.2.17.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/lz4-java-1.6.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/maven-artifact-3.6.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/metrics-core-2.2.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-buffer-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-codec-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-common-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-handler-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-resolver-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-transport-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-transport-native-epoll-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/netty-transport-native-unix-common-4.1.45.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/osgi-resource-locator-1.0.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/paranamer-2.8.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/plexus-utils-3.2.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/reflections-0.9.11.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/rocksdbjni-5.18.3.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/scala-collection-compat_2.13-2.1.2.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/scala-java8-compat_2.13-0.9.0.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/scala-library-2.13.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/scala-logging_2.13-3.9.2.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/scala-reflect-2.13.1.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/slf4j-api-1.7.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/slf4j-log4j12-1.7.28.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/snappy-java-1.1.7.3.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/validation-api-2.0.1.Final.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/zookeeper-3.5.7.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/zookeeper-jute-3.5.7.jar:/home/jiayuan/apps/kafka_2.13-2.4.1/bin/../libs/zstd-jni-1.4.3-1.jar
	os.spec = Linux, amd64, 5.3.0-46-generic
	os.vcpus = 4
 (org.apache.kafka.connect.runtime.WorkerInfo:71)
[2020-04-12 19:46:30,136] INFO Scanning for plugin classes. This might take a moment ... (org.apache.kafka.connect.cli.ConnectDistributed:90)
[2020-04-12 19:46:30,158] INFO Loading plugin from: /usr/share/java/ridl-6.0.7.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,262] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/ridl-6.0.7.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,263] INFO Added plugin 'org.apache.kafka.connect.connector.policy.AllConnectorClientConfigOverridePolicy' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:30,263] INFO Added plugin 'org.apache.kafka.connect.connector.policy.PrincipalConnectorClientConfigOverridePolicy' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:30,263] INFO Added plugin 'org.apache.kafka.connect.connector.policy.NoneConnectorClientConfigOverridePolicy' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:30,264] INFO Loading plugin from: /usr/share/java/servlet-api-4.0.1.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,275] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/servlet-api-4.0.1.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,276] INFO Loading plugin from: /usr/share/java/unoloader-6.0.7.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,282] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/unoloader-6.0.7.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,282] INFO Loading plugin from: /usr/share/java/hsqldbutil1.8.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,301] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/hsqldbutil1.8.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,301] INFO Loading plugin from: /usr/share/java/jsp-api-2.3.4-SNAPSHOT.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,309] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/jsp-api-2.3.4-SNAPSHOT.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,310] INFO Loading plugin from: /usr/share/java/websocket-api.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,316] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/websocket-api.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,317] INFO Loading plugin from: /usr/share/java/libintl.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,319] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/libintl.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,319] INFO Loading plugin from: /usr/share/java/servlet-api.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,330] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/servlet-api.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,330] INFO Loading plugin from: /usr/share/java/gettext.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,336] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/gettext.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,337] INFO Loading plugin from: /usr/share/java/jurt.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,346] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/jurt.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,347] INFO Loading plugin from: /usr/share/java/jurt-6.0.7.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,357] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/jurt-6.0.7.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,357] INFO Loading plugin from: /usr/share/java/websocket-client-api.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,362] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/websocket-client-api.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,362] INFO Loading plugin from: /usr/share/java/unoil-6.0.7.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,465] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/unoil-6.0.7.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,465] INFO Loading plugin from: /usr/share/java/hsqldbutil1.8.0-1.8.0.10+dfsg.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,479] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/hsqldbutil1.8.0-1.8.0.10+dfsg.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,479] INFO Loading plugin from: /usr/share/java/servlet-api-3.1.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,486] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/servlet-api-3.1.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,487] INFO Loading plugin from: /usr/share/java/juh.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,494] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/juh.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,495] INFO Loading plugin from: /usr/share/java/hsqldb1.8.0-1.8.0.10+dfsg.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,535] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/hsqldb1.8.0-1.8.0.10+dfsg.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,536] INFO Loading plugin from: /usr/share/java/hsqldb1.8.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,574] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/hsqldb1.8.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,574] INFO Loading plugin from: /usr/share/java/ridl.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,591] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/ridl.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,592] INFO Loading plugin from: /usr/share/java/el-api-3.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,597] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/el-api-3.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,597] INFO Loading plugin from: /usr/share/java/websocket-api-1.1.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,613] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/websocket-api-1.1.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,613] INFO Loading plugin from: /usr/share/java/unoil.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,691] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/unoil.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,692] INFO Loading plugin from: /usr/share/java/websocket-client-api-1.1.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,696] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/websocket-client-api-1.1.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,696] INFO Loading plugin from: /usr/share/java/jsp-api-2.3.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:30,701] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/jsp-api-2.3.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:30,701] INFO Loading plugin from: /usr/share/java/kafka (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
[2020-04-12 19:46:31,252] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/kafka/} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:31,252] INFO Added plugin 'com.sintef.asam.MqttSourceConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:31,252] INFO Added plugin 'org.apache.kafka.connect.json.JsonConverter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:31,252] INFO Added plugin 'org.apache.kafka.connect.storage.StringConverter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:31,252] INFO Added plugin 'org.apache.kafka.connect.storage.SimpleHeaderConverter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:31,252] INFO Added plugin 'org.apache.kafka.common.config.provider.FileConfigProvider' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:193)
[2020-04-12 19:46:31,253] INFO Loading plugin from: /usr/share/java/el-api.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:31,259] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/el-api.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:31,259] INFO Loading plugin from: /usr/share/java/juh-6.0.7.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:31,265] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/juh-6.0.7.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:31,265] INFO Loading plugin from: /usr/share/java/java_uno.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:31,268] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/java_uno.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:31,268] INFO Loading plugin from: /usr/share/java/jsp-api.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:31,274] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/jsp-api.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:31,275] INFO Loading plugin from: /usr/share/java/unoloader.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:31,278] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/unoloader.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:31,278] INFO Loading plugin from: /usr/share/java/websocket-api-1.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:31,282] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/websocket-api-1.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)
[2020-04-12 19:46:31,282] INFO Loading plugin from: /usr/share/java/el-api-3.0.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:241)
[2020-04-12 19:46:31,287] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/el-api-3.0.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:264)

At this point it was completely stuck and I couldn't open port 19005

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.