2016-09-15 46 views
0

設置卡夫卡:連接問題 - 所有的服務器無法處理請求」

我們有一個3節點卡夫卡集羣,處理信息通過nginx的未來在nginx的手就開了一個PHP這反過來叉一個。 Python進程和調用KafkaClient,SimpleProducer & Send_Message

的飼養員是在同一臺主機卡夫卡上運行Nginx的是一個單獨的主機上。端口2181,2182,3888,9092都是開放的。沒有在開始看到錯誤zookeeper,kafka。所有這些設置都在同一個vpc的AWS上。

卡夫卡&動物園管理員運行作爲卡夫卡用戶,Nginx的運行作爲nginx的,PHP-fpm的運行作爲阿帕奇

版本

卡夫卡:0.8.2 的Python: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殼

運行

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

我們能夠查看郵件

方案2:

運行Python代碼的命令行(從nginx的主機),能夠從消費者查看郵件

場景3:

運行php代碼命令行(來自nginx主機),能夠查看來自消費者的消息

方案4:

從REST客戶端運行(如郵差)使用REST URL /捲曲,得到以下信息:

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

這說明,交通要nginx的,nginx的執行python腳本,但在第一次調用Kafka時發生錯誤 - KafkaClient發生。不知何故,python無法訪問Kafka。

不知道這是用戶權限/愚蠢的配置錯誤。

而且......

  1. 我們在另一個VPC類似的工作設置
  2. 安全組,配置文件,代碼庫特性等都是一致的
  3. 升級選項都不是可能性在近期

任何指針/幫助/新鮮的一雙眼睛真的會幫助我們去。

謝謝!

回答

0

最後認爲apache用戶沒有「正確」權限。

selinuxconlist apache幫助解決了這個問題。

相關問題