{"id":20903843,"url":"https://github.com/ivpal/cdc-realtime-search","last_synced_at":"2026-04-30T12:34:57.647Z","repository":{"id":93268257,"uuid":"606492395","full_name":"ivpal/CDC-Realtime-Search","owner":"ivpal","description":"Project demonstrates realtime index updates via change data capture","archived":false,"fork":false,"pushed_at":"2023-02-25T19:02:55.000Z","size":120,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-27T18:44:29.568Z","etag":null,"topics":["change-data-capture","debezium","elasticsearch","kafka-connect","redpanda","spring-boot","webflux"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivpal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-25T16:53:03.000Z","updated_at":"2024-06-06T08:03:52.000Z","dependencies_parsed_at":"2023-06-19T08:19:42.662Z","dependency_job_id":null,"html_url":"https://github.com/ivpal/CDC-Realtime-Search","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ivpal/CDC-Realtime-Search","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivpal%2FCDC-Realtime-Search","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivpal%2FCDC-Realtime-Search/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivpal%2FCDC-Realtime-Search/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivpal%2FCDC-Realtime-Search/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivpal","download_url":"https://codeload.github.com/ivpal/CDC-Realtime-Search/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivpal%2FCDC-Realtime-Search/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32465009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["change-data-capture","debezium","elasticsearch","kafka-connect","redpanda","spring-boot","webflux"],"created_at":"2024-11-18T13:15:12.092Z","updated_at":"2026-04-30T12:34:57.623Z","avatar_url":"https://github.com/ivpal.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Change Data Capture Realtime Search\n\n[![Kotlin](https://img.shields.io/badge/kotlin-1.7.22-blue.svg?logo=kotlin)](http://kotlinlang.org)\n\n![scheme](./scheme.png)\n\nUsers - service designed to store information about users. Changes in users database are captured via Debezium connector\nand emit to Redpanda topic. Search service receives events from Redpanda and update index in Elasticsearch. Search service\nalso provides API for query user information from Elasticsearch.\n\n## Setup\n```shell\ngit clone https://github.com/ivpal/CDC-Realtime-Search.git\ncd CDC-Realtime-Search/\n```\nFor build Docker images you need Java 17 or higher:\n```shell\n./gradlew users:jibDockerBuild\n./gradlew search:jibDockerBuild\n```\n\n# Run\n```shell\ndocker-compose up -d\n```\n\n### Start PostgreSQL connector\n\n```shell\ncurl --location --request POST 'localhost:8083/connectors/' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n  \"name\": \"users-connector\",\n  \"config\": {\n    \"connector.class\": \"io.debezium.connector.postgresql.PostgresConnector\",\n    \"tasks.max\": \"1\",\n    \"database.hostname\": \"users-db\",\n    \"database.port\": \"5432\",\n    \"database.user\": \"users\",\n    \"database.password\": \"users\",\n    \"database.dbname\" : \"postgres\",\n    \"database.server.id\": \"184054\",\n    \"topic.prefix\": \"users\",\n    \"database.history.kafka.bootstrap.servers\": \"redpanda:9092\",\n    \"database.history.kafka.topic\": \"schema-changes.users\"\n  }\n}'\n```\n\n## Usage\n### Create user\n```shell\ncurl --location --request POST 'localhost:8080/api/users' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n    \"username\": \"ivpal\",\n    \"firstname\": \"Pavel\",\n    \"lastname\": \"Ivanov\"\n}'\n```\nSearch request:\n```shell\ncurl --location --request GET 'localhost:8081/api/search?q=pa'\n```\nResponse:\n```json\n[\n  {\n    \"id\": 1,\n    \"username\": \"ivpal\",\n    \"firstname\": \"Pavel\",\n    \"lastname\": \"Ivanov\"\n  }\n]\n```\n### Update user\n```shell\ncurl --location --request PUT 'localhost:8080/api/users/1' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n    \"username\": \"newusername\",\n    \"firstname\": \"Pavel\",\n    \"lastname\": \"Ivanov\"\n}'\n```\nSearch request:\n```shell\ncurl --location --request GET 'localhost:8081/api/search?q=pa'\n```\nResponse:\n```json\n[\n    {\n        \"id\": 1,\n        \"username\": \"newusername\",\n        \"firstname\": \"Pavel\",\n        \"lastname\": \"Ivanov\"\n    }\n]\n```\n### Delete user\n```shell\ncurl --location --request DELETE 'localhost:8080/api/users/1'\n```\nSearch request:\n```shell\ncurl --location --request GET 'localhost:8081/api/search?q=pa'\n```\nResponse:\n```json\n[]\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivpal%2Fcdc-realtime-search","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivpal%2Fcdc-realtime-search","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivpal%2Fcdc-realtime-search/lists"}