Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add docker demo to test connector #99

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions demo/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM eclipse-temurin:11-jdk AS base

ADD ./ connector
WORKDIR connector

RUN ./gradlew installDist

FROM confluentinc/cp-kafka-connect:7.3.3

COPY --from=base /connector/build/install /connector-plugins
11 changes: 11 additions & 0 deletions demo/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
all: build

build:
docker compose build

up:
docker compose up -d

test:
curl -sSL 'http://localhost:8083/connector-plugins' \
| jq '.[] | select (.class | startswith("io.aiven"))'
73 changes: 73 additions & 0 deletions demo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Demo

How to load plugins to Kafka Connect installations.

## Requirements

To run the demo, you need:
- Docker compose
- `curl`
- `jq`

## Demo

To install transforms into a Kafka Connect installation, it needs:

- Build `elasticsearch-connector-for-apache-kafka` libraries
- Add libraries to Kafka Connect nodes
- Configure Kafka Connect `plugin.path`

### Build `elasticsearch-connector-for-apache-kafka` libraries

To build libraries, use `gradlew installDist` command.
e.g. Dockerfile build:

```dockerfile
FROM eclipse-temurin:11-jdk AS base

ADD ./ connector
WORKDIR connector

RUN ./gradlew installDist
```

This generates the set of libraries to be installed in Kafka Connect workers.

### Add libraries to Kafka Connect nodes

Copy the directory with libraries into your Kafka Connect nodes.
e.g. add directory to Docker images:

```dockerfile
FROM confluentinc/cp-kafka-connect:7.3.3

COPY --from=base /connector/build/install /connector-plugins
```

### Configure Kafka Connect `plugin.path`

On Kafka Connect configuration file, set `plugin.path` to indicate where to load plugins from,
e.g. with Docker compose:

```yaml
connect:
# ...
environment:
# ...
CONNECT_PLUGIN_PATH: /usr/share/java,/connector-plugins # added on Dockerfile build
```

## Running

1. Build docker images: `make build` or `docker compose build`
2. Start environment: `make up` or `docker compose up -d`
3. Test connect plugins are loaded: `make test`

Sample response:
```json lines
{
"class": "io.aiven.connect.elasticsearch.ElasticsearchSinkConnector",
"type": "sink",
"version": "6.2.0-SNAPSHOT"
}
```
67 changes: 67 additions & 0 deletions demo/compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
version: '3.8'
services:
zookeeper:
image: "confluentinc/cp-zookeeper:7.3.3"
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181

kafka:
image: "confluentinc/cp-kafka:7.3.3"
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:19092,PLAINTEXT_HOST://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1

connect:
build:
context: ../.
dockerfile: demo/Dockerfile
ports:
- "8083:8083"
environment:
CONNECT_BOOTSTRAP_SERVERS: kafka:19092
CONNECT_REST_ADVERTISED_HOST_NAME: localhost
CONNECT_REST_PORT: 8083
CONNECT_GROUP_ID: connect-demo
CONNECT_CONFIG_STORAGE_TOPIC: connect-demo-configs
CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000
CONNECT_OFFSET_STORAGE_TOPIC: connect-demo-offsets
CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
CONNECT_STATUS_STORAGE_TOPIC: connect-demo-status
CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1

CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter
CONNECT_KEY_CONVERTER_SCHEMA_ENABLE: "false"
CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
CONNECT_PLUGIN_PATH: /usr/share/java,/connector-plugins # added on Dockerfile build

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
container_name: elasticsearch
ports:
- "9200:9200"
- "9300:9300"
environment:
- "discovery.type=single-node"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: "2G"
kibana:
image: docker.elastic.co/kibana/kibana:8.12.2
container_name: kibana
ports:
- "5601:5601"
Loading