KSQL Cli работает, но KSQL Python API не работает во время работы сервера KSQL

Мне удалось настроить сервер KSQL и клиент CLI KSQL для использования потока с использованием KSQL и его работы с использованием cli. Например, команда show themes работает ниже

ksql> SHOW TOPICS;

 Kafka Topic                            | Registered | Partitions | Partition Replicas | Consumers | Consumer Groups 
---------------------------------------------------------------------------------------------------------------------
 _confluent-ksql-default__command_topic | true       | 1          | 1                  | 0         | 0              

Но когда я использую ksql пакет python для вызова того же SHOW TOPIC или любого SELECT запроса, он дает ошибку ниже.

>>> client = KSQLAPI('http://localhost:8088')
>>> results = client.query('SHOW TOPICS;')
>>> for item in results:
...     print(item)
... 
Traceback (most recent call last):
  File "/home/ubuntu/venv_language/lib/python3.6/site-packages/ksql/api.py", line 170, in _request
    r = urllib.request.urlopen(req, timeout=self.timeout)
  File "/usr/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.6/urllib/request.py", line 532, in open
    response = meth(req, response)
  File "/usr/lib/python3.6/urllib/request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python3.6/urllib/request.py", line 570, in error
    return self._call_chain(*args)
  File "/usr/lib/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.6/urllib/request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ubuntu/venv_language/lib/python3.6/site-packages/ksql/client.py", line 63, in query
    yield from process_query_result(results, return_objects)
  File "/home/ubuntu/venv_language/lib/python3.6/site-packages/ksql/utils.py", line 100, in process_query_result
    yield from results
  File "/home/ubuntu/venv_language/lib/python3.6/site-packages/ksql/api.py", line 113, in query
    endpoint="query", sql_string=query_string, stream_properties=stream_properties
  File "/home/ubuntu/venv_language/lib/python3.6/site-packages/ksql/api.py", line 178, in _request
    raise KSQLError(content.get("message"), content.get("error_code"), content.get("stackTrace"))
ksql.errors.KSQLError: ('HTTP 415 Unsupported Media Type', None, ['org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.getMethodRouter(MethodSelectingRouter.java:478)', 'org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.access$000(MethodSelectingRouter.java:94)', 'org.glassfish.jersey.server.internal.routing.MethodSelectingRouter$4.apply(MethodSelectingRouter.java:779)', 'org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.apply(MethodSelectingRouter.java:371)', 'org.glassfish.jersey

Это информация о сервере KSQL

{ KsqlServerInfo: { version: "0.13.0", kafkaClusterId: "NXj5kHsORuCShpGsZWMvKg", ksqlServiceId: "confluent_rmoff_01", serverStatus: "RUNNING" } }

Я не нашел в Интернете большой помощи по этому поводу. Кто-нибудь может мне здесь помочь, если я делаю что-то не так?

Спасибо


person iamabhaykmr    schedule 11.01.2021    source источник
comment
Какая версия ksqlDB у вас установлена? Какая библиотека Python?   -  person Robin Moffatt    schedule 12.01.2021
comment
{KsqlServerInfo: {версия: 0.13.0, kafkaClusterId: NXj5kHsORuCShpGsZWMvKg, ksqlServiceId: confluent_rmoff_01, serverStatus: RUNNING}} @RobinMoffatt   -  person iamabhaykmr    schedule 12.01.2021
comment
Какая библиотека Python?   -  person Robin Moffatt    schedule 12.01.2021
comment
Я сделал pip install ksql @RobinMoffatt   -  person iamabhaykmr    schedule 12.01.2021
comment
ksql 0.10.2. pypi.org/project/ksql @RobinMoffatt   -  person iamabhaykmr    schedule 12.01.2021


Ответы (1)


Для SHOW TOPICS вам нужно использовать метод ksql, а не метод query:

╰─$ python
Python 3.7.6 (default, Jan  8 2020, 11:09:02)
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from ksql import KSQLAPI
>>> client = KSQLAPI('http://localhost:8088')
>>> client.ksql('show topics')
[{'@type': 'kafka_topics', 'statementText': 'show topics;', 'topics': [{'name': 'movements', 'replicaInfo': [1]}], 'warnings': []}]

Если вы воспользуетесь методом query, вы увидите ошибку, с которой столкнулись:

>>> results = client.query('SHOW TOPICS;')
>>> for item in results:
...     print(item)
...
Traceback (most recent call last):
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/site-packages/ksql/api.py", line 170, in _request
    r = urllib.request.urlopen(req, timeout=self.timeout)
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/urllib/request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/site-packages/ksql/client.py", line 63, in query
    yield from process_query_result(results, return_objects)
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/site-packages/ksql/utils.py", line 100, in process_query_result
    yield from results
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/site-packages/ksql/api.py", line 113, in query
    endpoint="query", sql_string=query_string, stream_properties=stream_properties
  File "/Users/rmoff/.pyenv/versions/3.7.6/lib/python3.7/site-packages/ksql/api.py", line 178, in _request
    raise KSQLError(content.get("message"), content.get("error_code"), content.get("stackTrace"))
ksql.errors.KSQLError: ("Statement type `io.confluent.ksql.parser.KsqlParser$PreparedStatement' not supported for this resource", 40000, None)
person Robin Moffatt    schedule 12.01.2021