Knight's move: comment recevoir des messages dans Kafka via Nginx

Bonjour, Habr! Je suis Alexey Kashavkin, ingénieur des opérations cloud chez G-Core Labs, et j'administre OpenStack depuis cinq ans. Aujourd'hui, je vais parler d'une béquille pour une utilisation non standard des technologies ou comment mettre les courtiers Kafka derrière Nginx. Si, pour une raison quelconque, vous n'avez pas d'autre moyen de recevoir des messages, cette note est juste pour vous.





Pourquoi est-ce nécessaire

, Kafka, . — — PoC- , Kafka c Elasticsearch. (SSL/TLS), PEM- Kafka . , Puppet. Nginx. , , Kafka - , . — , - - .





, - , legacy-, , - HTTP, .





, . Nginx:





  1. echo





  2. kafka-log





, . c , c :





load_module /etc/nginx/modules/ngx_http_echo_module.so;
load_module /etc/nginx/modules/ngx_http_kafka_log_module.so;

http {
    
  kafka_log_kafka_brokers kafka1:9092,kafka2:9092,kafka3:9092;
    
  server {
    listen	443 ssl; 

    ssl_certificate 	/etc/nginx/certs/your_cert.crt;
    ssl_certificate_key /etc/nginx/certs/your_cert_key.key;
          
    if ($request_uri ~* ^/(.*)$) {
      set $request_key $1;
    }
        
    location / {
      kafka_log kafka:$request_key $request_body;
      echo_read_request_body;
    }
  }
}
      
      



:





  1. :





    • ngx_http_echo_module.so proxy_pass



      , fastcgi_pass



      , uwsgi_pass



      scgi_pass



      ;





    • ngx_http_kafka_log_module.so — Nginx Kafka.





  2. kafka_log_kafka_brokers — Kafka.





  3. http c server, $request_uri



    . , “/”



    $request_uri



    , rewrite



    return



    echo_read_request_body. $request_key



    . — /topic_name, — topic_name.





  4. location :





    • kafka_log — Kafka ;





    • echo_read_request_body— , $request_body



      .





— Kafka, URL https://example.com/topic_name





P.S. , . Kafka.








All Articles