Déploiement et application de Kafka

Préparer

Vous avez besoin d'une machine Linux pour installer Docker et Kafka

Vous devez installer VisualStudio C # pour appliquer Kafka

Installation Docker

Tutoriel d'installation

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"

Je suppose que tu aimes

Origine blog.csdn.net/black0707/article/details/124883133
conseillé
Classement