Préparer
Vous avez besoin d'une machine Linux pour installer Docker et Kafka
Vous devez installer VisualStudio C # pour appliquer Kafka
Installation Docker
Installation rapide de Kafka
Créer un répertoire
mkdir Kafka
cd Kafka
vi docker-compose.yml
Écrire le fichier docker-compose.yml
version: "2"
services:
kafkaserver:
image: "spotify/kafka:latest"
container_name: kafka
hostname: kafkaserver
restart:always
networks:
- kafkanet
ports:
- 2181:2181
- 9092:9092
environment:
ADVERTISED_HOST: kafkaserver
ADVERTISED_PORT: 9092
kafka_manager:
image: "mzagar/kafka-manager-docker:1.3.3.4"
container_name: kafkamanager
restart:always
networks:
- kafkanet
ports:
- 9000:9000
links:
- kafkaserver
environment:
ZK_HOSTS: "kafkaserver:2181"
networks:
kafkanet:
driver: bridge
Exécuter Docker Compose
docker-compose up
docker-compose ps
Définir le fichier des hôtes locaux
"kafkaserver" 127.0.0.1
Attendre que le manager de kafka démarre (3 minutes)
Configuration rapide de Kafka
Connectez-vous à l'interface de gestion de Kafka
http://localhost:9000
créer un cluster
Cluster->Add Cluster->Enter your cluster name
- host "kafkaserver:2181"
- Version "0.10.0.1"
-(可选)开启size跟踪(JMX Enable Checked)
créer un sujet
Topic->Create->Set your topic name
Scénarios d'application Kafka :
Lorsque les données de base générales de l'entreprise ont un débit élevé, elles jouent le rôle de producteur et écrivent dans la rubrique d'envoi à haut débit de Kafka.
Les programmes généraux de traitement des applications, en particulier les applications présentant des goulots d'étranglement en écriture tels que les bases de données, sont collectivement appelés consommateurs, qui contrôlent le trafic Kafka et adoptent la distribution, l'abonnement et la consommation de microservices et la mise à l'échelle automatique.
Codage d'applications Kafka (C#)
VisualStudio crée deux projets de console
Kafka.Producer - 主题消息发布者
Kafka.Consumer - 主题消息订阅与消费者
Ajouter une référence Nuget
Confluent.Kafka
Ajouter une classe intermédiaire de convertisseur de message
public class KafkaConverter : IDeserializer<object>
{
public object Deserialize(ReadOnlySpan<byte> data, bool isNull, SerializationContext context)
{
if (isNull) return null;
var json = Encoding.UTF8.GetString(data.ToArray());
try
{
return JsonConvert.DeserializeObject(json);
}
catch
{
return json;
}
}
}
Kafka.Producteur.csproj
static void Main(string[] args)
{
try
{
ProducerConfig config = new ProducerConfig();
config.BootstrapServers = "XXX.XXX.XX.XXX:9092";
var builder = new ProducerBuilder<string, object>(config);
builder.SetValueSerializer(new KafkaConverter());//设置序列化方式
var producer = builder.Build();
producer.Produce("Kafka_test_topic", new Message<string, object>() { Key = "Test", Value = "hello world" });
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
Kafka.Consumer.csproj
static void Main(string[] args)
{
ConsumerConfig config = new ConsumerConfig();
config.BootstrapServers = "XXX.XXX.XX.XXX:9092";
config.GroupId = "group.1";
config.AutoOffsetReset = AutoOffsetReset.Earliest;
config.EnableAutoCommit = false;
var builder = new ConsumerBuilder<string, object>(config);
builder.SetValueDeserializer(new KafkaConverter());//设置反序列化方式
var consumer = builder.Build();
consumer.Subscribe("SinocareExternal");//订阅消息使用Subscribe方法
//consumer.Assign(new TopicPartition("test", new Partition(1)));//从指定的Partition订阅消息使用Assign方法
while (true)
{
var result = consumer.Consume();
Console.WriteLine($"recieve message:{result.Message.Value}");
consumer.Commit(result);//手动提交,如果上面的EnableAutoCommit=true表示自动提交,则无需调用Commit方法
}
}
Besoin de comprendre le principe du message et le concept de consommation de Kafka
Livre recommandé : "Compréhension approfondie des principes fondamentaux de conception et de pratique de Kafka"