2016-09-15 14 views
0

セットアップカフカ:接続に関する問題 - すべてのサーバがリクエストの処理に失敗しました」

私たちはnginxのから入ってくるメッセージを処理し、3ノードカフカのクラスタを持つnginxの手もオフPHP順番にフォークaに。 Pythonのプロセス及び9092は全て開放され、飼育係は、カフカと同じホスト上で実行され、nginxのは、別のホスト上にある。ポート2181、2182、3888 KafkaClient、SimpleProducer & SEND_MESSAGE

を呼び出す。始動に見られるエラーなしzookeeper、kafka。このセットアップはすべて同じvpcのAWSにあります。

カフカ&飼育係がカフカユーザとして実行され、nginxのは、Apache

バージョン

カフカとしてnginxの、PHP-FPM実行として実行されている:0.8.2 パイソン:2.7.5

関連プロパティファイルからのスニペット。

zookeeper.properties

dataDir=/data/zookeeper 
clientPort=2181 
maxClientCnxns=100 
tickTime=2000 
initLimit=5 
syncLimit=2 
server.1=172.31.41.78:2888:3888 
server.2=172.31.45.245:2888:3888 
server.3=172.31.23.101:2888:3888 

producer.properties

metadata.broker.list=172.31.41.78:9092,172.31.45.245:9092,172.31.23.101:9092 

consumer.properties

zookeeper.connect=172.31.41.78:2181,172.31.45.245:2181,172.31.23.101:2181 
zookeeper.connection.timeout.ms=6000 

サーバー。特性(他のマシン上の適切なIPとセットアップ)

port=9092 
advertised.host.name=172.31.41.78 
host.name=172.31.41.78 
zookeeper.connect=172.31.41.78:2181,172.31.45.245:2181,172.31.23.101:2181 
zookeeper.connection.timeout.ms=60000 

PHPコード


function sendDataToKafka($_data,$_srcType) { 
    try{ 
    $pyKafka = "/usr/bin/python /etc/nginx/html/postMon.py ".$_srcType; 
     $dspec = array(
     0 => array("pipe","r"), 
     1 => array("pipe","w"), 
     2 => array("file","/dev/null", "a") 
    ); 

    $process = proc_open($pyKafka,$dspec,$pipes); 
     if (is_resource($process)) { 

    if(fwrite($pipes[0],$_data) == true){ 
    fclose($pipes[0]); 
     echo stream_get_contents($pipes[1]); 
    fclose($pipes[1]); 
     proc_close($process); 
    echo "Process completed"; 

Pythonコード

import sys,json,time,ConfigParser 
import traceback 
sys.path.append("/etc/nginx/html/kafka_python-0.9.4-py2.7.egg") 
from kafka import KafkaClient,SimpleProducer 
try: 
    srcMap = { 
     'Alert'   : 'alerts' 
    } 
    topic = srcMap.get(sys.argv[1],'events') 

    data = '' 
    data = 'Testing static Kafka message' 
    print 'Host: 172.31.23.101:9092' 

    kafka = KafkaClient("172.31.23.101:9092") 
    producer = SimpleProducer(kafka,random_start=True) 
    producer.send_messages(topic,data); 
except Exception as e:  # most generic exception you can catch 
     print str(e) 

シナリオ

シナリオ1:

bin/kafka-console-producer.sh --zookeeper 172.31.41.78:2181,172.31.45.245:2181,172.31.23.101:2181 --topic alerts 

1上にシェルを実行

ランニング

我々はメッセージ

シナリオ2閲覧することができます

./kafka-console-consumer.sh --zookeeper 172.31.41.78:2181,172.31.45.245:2181,172.31.23.101:2181 --topic alerts 

:消費者からのメッセージを表示することができ、

は(nginxのホストから)のpythonコードのコマンドラインを実行し

シナリオ3:

消費者からのメッセージを表示できるphpコードコマンドライン(nginxホストから)を実行する

シナリオ4:nginxのは、実行中、トラフィックはnginxのために行く、このショー

<html> 
<body> 
    Host: 172.31.23.101:9092 
    All servers failed to process request 
    <pre>Process completed</pre></body> 
<html> 

は、次のメッセージを取得し、REST URLを使用してRESTクライアント(POSTMANなど)/ CURLからの実行php & pythonスクリプトですが、Kafkaへの最初の呼び出しが行われたときにエラーになります - KafkaClientが発生します。どういうわけか、PythonはKafkaにアクセスできません。

これがユーザー権限か愚かな設定間違いかどうかわかりません。

また......

  1. 私たちは、セキュリティグループ、設定ファイル、コードベースのプロパティなど他のVPC
  2. に同様の作業を設定している一貫した
  3. アップグレードオプションはありませんされています近い将来に可能性があります

すべてのポインタ/ヘルプ/新鮮な目のペアは本当に私たちを助けます。

ありがとうございました!

答えて

0

最後に、apacheユーザーに「正しい」権限がないと考えられました。

selinuxconlist apache問題を解決するのに役立ちました。

関連する問題