KafkaProducer - GSSAPI lib не доступен - PullRequest
0 голосов
/ 26 марта 2019

Я пишу программу на Python для подключения к Kafka и чтения / записи сообщений.

Ошибка источника при выполнении python3 provider.py

File "/opt/local/bgdatapp/anaconda3/lib/python3.7/site-packages/kafka/conn.py", line 255, in init
assert gssapi is not None, 'GSSAPI lib not available'
AssertionError: GSSAPI lib not available
Exception ignored in: <function BrokerConnection.del at 0x7f715f4b3378>
Traceback (most recent call last):
File "/opt/local/bgdatapp/anaconda3/lib/python3.7/site-packages/kafka/conn.py", line 696, in del
self._close_socket()
File "/opt/local/bgdatapp/anaconda3/lib/python3.7/site-packages/kafka/conn.py", line 691, in _close_socket
if self._sock:
AttributeError: 'BrokerConnection' object has no attribute '_sock'
INFO:kafka.producer.kafka:Kafka producer closed

ОС - Red Hat Enterprise Linux Server версии 6.10 (Сантьяго) Python3 - 3.7.1 - Anaconda3 Python Путь Python3 - / opt / local / bgdatapp / anaconda3 / bin / python Керберос - 5 Кафка - Cloudera 13,1

Я могу получить доступ к своей кафке из оболочки, и я могу толкать и читать сообщения.

kafka-console-producer --broker-list host.domain.com:9092 --topic Topic1 --producer.config client.properties

cat client.properties security.protocol = SASL_PLAINTEXT sasl.kerberos.service.name = Кафка

Симуляция того же самого из Python анаконды вызывает ошибку.

import os
import socket
import gssapi
import logging
from kafka import KafkaProducer
KAFKA_TOPIC = 'Topic1'
KAFKA_BROKERS = 'host.domain.com:9092'
os.environ['KAFKA_OPTS'] = '-Djava.security.auth.login.config=/opt/local/account1/jaas.conf'
logging.basicConfig(level=logging.INFO)
messages = [b'hello kafka', b'I am sending', b'3 test messages']
producer = KafkaProducer(bootstrap_servers=KAFKA_BROKERS, api_version=(0 , 10), security_protocol='SASL_PLAINTEXT', sasl_mechanism='GSSAPI', sasl_kerberos_service_name='kafka', max_request_size=3173440261)
for m in messages:
  print (producer.send(KAFKA_TOPIC, m).get(timeout=30))

ОШИБКА:

File "/opt/local/bgdatapp/anaconda3/lib/python3.7/site-packages/kafka/conn.py", line 255, in init
    assert gssapi is not None, 'GSSAPI lib not available'
    AssertionError: GSSAPI lib not available
    Exception ignored in: <function BrokerConnection.del at 0x7f715f4b3378>
    Traceback (most recent call last):
    File "/opt/local/bgdatapp/anaconda3/lib/python3.7/site-packages/kafka/conn.py", line 696, in del
    self._close_socket()
    File "/opt/local/bgdatapp/anaconda3/lib/python3.7/site-packages/kafka/conn.py", line 691, in _close_socket
    if self._sock:
    AttributeError: 'BrokerConnection' object has no attribute '_sock'
    INFO:kafka.producer.kafka:Kafka producer closed

Можете ли вы предложить какое-либо исправление для решения этой проблемы?

Спасибо

1 Ответ

0 голосов
/ 31 марта 2019

Здесь на самом деле две ошибки. Первая - ошибка импорта gssapi; вторая ошибка во время gc / del (self._sock AttributeError). Вторая ошибка - просто ошибка. Мы исправим это в следующем выпуске. Но, если вы исправите ошибку импорта gssapi, этого второго AttributeError не должно произойти.

Хорошо, так какую библиотеку gssapi вы установили? Можете ли вы сделать это в вашей среде:

from gssapi.raw.misc import GSSError

Похоже, вы установили старый / устаревший модуль python-gssapi. Вы хотите этот: https://pypi.org/project/gssapi/ (не этот: https://pypi.org/project/python-gssapi/)

...