Repositório contendo examplos simples para usar o Apache Kafka com C++
A linguagem C++ é temida por muitos, porém a linguagem em si não é o problema, mas o ambiente para compilação/deploy é o que mais chateia em um ambiente profissional, em C/C++ lidamos com Make, CMake, libs e dll's e essa parte ainda se manteve em um processo mais manual, diferente de Java ou C#, em sistemas maiores, preparar um ambiente do zero não é algo trivial.
Esse problema do ambiente em si, foi minha maior motivação de iniciar esse curso em português(Brasil). O código em si eu sempre uso o 100% inglês pois há projetos ondem desenvolvedores de outros paises podem interagir.
O objetivo principal do curso é o Apache Kafka, muito ultilizado em sistemas com alto trafégo de informações, porém com pouca documentação em inglês, quanto mais em português.
Esse curso não é voltado para iniciantes, caso queria aprender mais sobre os tópicos como C++,Apache Kafka, há diversos materais na internet que são uteis, abaixo cito algumas das minhas fontes.
- Livro do mestre(C++)
- Livro Apache Kafka(Java)
- Livro sobre Integração usando padrões
- Livro sobre Concorrência(C++)
Importante! O objetivo desse material é voltado para o aprendizado em C++ de forma mais prática, portanto padrões de projeto, arquitetura , testes unitários não serão obrigatoriamente mencionados/ultilizados.
Para Simplicar as coisas eu criei imagens usando o Dockerhub, com essa ferramenta o programador dedica um esforço apenas uma vez para montar o ambiente salvando em uma imagem em algum repositório, caso não esteja usando ainda, há materiais em português e inglês no youtube so o assunto.
Eu criei 3 imagens:
-
CentosOs 8
- Nela já baixei o gcc 8, cmake 3, make, perl,boost 1.6 entre outras ferramentas.
-
Bibliotecas para compilar
- Nessa imagem todas as libs que compilo a partir do código(librdkafka, avro-cpp, avro-c, libserdes) e instalo elas no /user/local
-
Código exemplos
- Essa é a imagem do desenvolvimento em sí, dela contém os exemplos com Avro-cpp, librdkafka e libserdes e também a partir dela rodo a imagem Landoop para rodar a kafka em si.
Para rodar o ambiente é necessário apenas instalar o DockerHub e DockerCompose, após instalar apenas rodar o comando dentro do diretório onde esta projeto.
docker-compose.exe up -d --build
Para parar os containers,digite no terminal
docker-compose.exe down
Usei o VsCode da microsoft para debug, e por esse motivo, já deixei pronto um arquivo launch.json pronto para abrir o projeto no container e ter uma melhor visualização do projeto.
Criei um exemplo simples de serialização/desserialização para um objeto Trade referente ao mercado Bitcoin, o intuito desse curso é ser evolutivo, ou seja trabalhar com dados em reais da api, usando libcurl, threads, boost::asio , mongoDb entre outras ferramentas.
Para esse exemplo usei um schema simples representando um negócio do mercado Bitcoin, abaixo o schema no formato .json
{
"name": "Trade",
"type": "record",
"namespace":"Bitcoin",
"fields":
[
{"name":"tid", "type":"string","doc":"Date and time of trading in the Unix Era" },
{"name":"date", "type":"string","doc":"Negotiation identifier" },
{"name":"type", "type":"string","doc":"Side trade(buy|sell)" },
{"name":"price", "type":"string","doc":"Price" },
{"name":"amount", "type":"string","doc":"Trading amount" }
]
}
E para torna as coisas mais simples abstrai o Avro-cpp, abaixo um exemplo em C++ de como criar um negócio(objeto Trade) e serializar/desserializar.
bitcoin::Trade trade("8615953", "1613358560", "buy", "263249.83999", "0.03000899");
trade.serialize();
trade.deserialize();