{"id":22061389,"url":"https://github.com/jailtonjunior94/csharp-kafka","last_synced_at":"2026-04-13T17:04:30.263Z","repository":{"id":129481120,"uuid":"330060092","full_name":"JailtonJunior94/csharp-kafka","owner":"JailtonJunior94","description":"🔬 C#, Kafka, Zookeeper, Debezium, Azure Functions, Sql Server e Slack ","archived":false,"fork":false,"pushed_at":"2021-07-15T18:14:19.000Z","size":46,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-28T23:25:50.429Z","etag":null,"topics":["azure-functions","csharp","debezium","kafka","slack","sqlserver","zookeeper"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JailtonJunior94.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-01-16T01:29:57.000Z","updated_at":"2023-04-12T20:53:45.000Z","dependencies_parsed_at":"2023-06-11T09:30:28.462Z","dependency_job_id":null,"html_url":"https://github.com/JailtonJunior94/csharp-kafka","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JailtonJunior94%2Fcsharp-kafka","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JailtonJunior94%2Fcsharp-kafka/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JailtonJunior94%2Fcsharp-kafka/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JailtonJunior94%2Fcsharp-kafka/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JailtonJunior94","download_url":"https://codeload.github.com/JailtonJunior94/csharp-kafka/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245138796,"owners_count":20567035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["azure-functions","csharp","debezium","kafka","slack","sqlserver","zookeeper"],"created_at":"2024-11-30T18:11:55.468Z","updated_at":"2026-04-13T17:04:29.928Z","avatar_url":"https://github.com/JailtonJunior94.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Sobre\nO Projeto Csharp Kafka é uma PoC ([Prova de Conceito](https://pt.wikipedia.org/wiki/Prova_de_conceito#:~:text=Uma%20prova%20de%20conceito%2C%20ou,uma%20pesquisa%20ou%20artigo%20t%C3%A9cnico.)) de como podemos utilizar [Kafka](https://kafka.apache.org), [Debezium](https://debezium.io), [Zookeeper](https://zookeeper.apache.org) e [CDC](https://docs.microsoft.com/pt-br/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=sql-server-ver15) para capturar eventos no [SQL Server](https://www.microsoft.com/pt-br/sql-server/sql-server-2019) e enviar notificações no Slack.\n\n## Tecnologias Utilizadas 🚀\n* **[C#](https://docs.microsoft.com/pt-br/dotnet/csharp/)**\n* **[Azure Functions](https://docs.microsoft.com/pt-br/azure/azure-functions/)**\n* **[Worker Service](https://docs.microsoft.com/pt-br/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-5.0\u0026tabs=visual-studio)**\n* **[Apache Kafka](https://kafka.apache.org)**\n* **[Zookeeper](https://zookeeper.apache.org)**\n* **[Debezium](https://debezium.io)**\n* **[CDC](https://docs.microsoft.com/pt-br/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=sql-server-ver15)**\n*  **[SQL Server](https://www.microsoft.com/pt-br/sql-server/sql-server-2019)**\n\n## Desenho da Solução 🎨\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://ik.imagekit.io/usw9dpm4u3i/csharp-kafka_w4kjp5e5D.png\" width=\"400\" title=\"Main\"\u003e\n\u003c/p\u003e\n\n## Como iniciar? \nPrimeiro de tudo precisamos criar o nosso container com o SQL Server através do Docker e o seguinte comando.\n```\ndocker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=password' -e 'MSSQL_AGENT_ENABLED=True' -p 1433:1433 -d --name=mssql2019 mcr.microsoft.com/mssql/server:2019-latest\n```\nApós criação do container do SQL Server precisamos criar o banco de dados da PoC.\n```\nCREATE DATABASE KafkaPoC\n```\nAgora vamos criar a tabela Customer\n```\nCREATE TABLE dbo.Customers\n(\n    [Id] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,\n    [Name] VARCHAR (50) NOT NULL,\n    [Email] VARCHAR (100) NOT NULL,\n    [CreatedAt] DATETIME NOT NULL,\n    [UpdatedAt] DATETIME NULL,\n    [Active] BIT NOT NULL\n)\n```\nPara que o Kafka, Zookeeper e Debezium funcione do jeito que precisamos é preciso habilitar o CDC (Change Data Capture) com os seguintes comandos.\n```\nEXEC sys.sp_cdc_enable_db\n```\nApós habilitar o CDC no nosso banco de dados SQL Server, vamos habilitar para que a tabela Customer escute todos os eventos do banco.\n```\nEXEC sys.sp_cdc_enable_table\n@source_schema = N'dbo',\n@source_name   = N'Customers',\n@role_name     = N'Admin',\n@supports_net_changes = 1\n```\nFeito isso vamos iniciar a nossa infra com o arquivo docker-compose.yml que está no projeto\n```\ndocker-compose up\n```\nPrecisamos configurar os nossos conectores, para isso vamos utilizar a API do Debezium.\u003cbr\u003e\nPara obter os conectores devemos fazer uma requisição GET na seguinte URL.\n```\nhttp://{seuip}:8083/connector-plugins\n```\nResultado: \n```\n[\n    {\n        \"class\": \"io.debezium.connector.sqlserver.SqlServerConnector\",\n        \"type\": \"source\",\n        \"version\": \"1.2.5.Final\"\n    },\n]\n```\nPara configurar o nosso conector entre o SQL Server e o Kafka precisamos fazer uma requisição do tipo POST na seguinte URL.\n```\nhttp://seuip:8083/connectors\n\n{\n\t\"name\": \"sqlserver-customers-connector\",\n\t\"config\": {\n    \"name\":\"sqlserver-customers-connector\",\n\t\t\"connector.class\": \"io.debezium.connector.sqlserver.SqlServerConnector\",\n    \"table.whitelist\": \"dbo.Customers\",\n\t\t\"database.hostname\": \"{seuip}\",\n\t\t\"database.port\": \"1433\",\n\t\t\"database.user\": \"sa\",\n\t\t\"database.password\": \"{password}\",\n\t\t\"database.dbname\": \"KafkaPoC\",\n\t\t\"database.server.name\": \"dbserver\",\n\t\t\"database.history.kafka.bootstrap.servers\": \"{seuip}:9092\",\n\t\t\"database.history.kafka.topic\": \"dbhistory.customers\"\n\t}\n}\n```\nCollection (Postman) - Debezium\n```\nhttps://www.getpostman.com/collections/4e9eb39b472f14431938\n```\n\nDepois de configurado toda infra do projeto, podemos testar as notificações atráves das operações CRUD que foram criadas utilizando Azure Function:\n\nCollection (Postman) - Azure Functions\n```\nhttps://www.getpostman.com/collections/a8bda617f739c1321475\n```\n## Swagger\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://ik.imagekit.io/usw9dpm4u3i/Swagger_imGNEGfPr0.PNG\" width=\"400\" title=\"Main\"\u003e\n\u003c/p\u003e\n\n## Slack\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://ik.imagekit.io/usw9dpm4u3i/Slack_hktg7ZB97w.PNG\" width=\"400\" title=\"Main\"\u003e\n\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjailtonjunior94%2Fcsharp-kafka","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjailtonjunior94%2Fcsharp-kafka","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjailtonjunior94%2Fcsharp-kafka/lists"}