Внешняя компонента (Native API) для интеграции 1С:Предприятие с Apache Kafka.
Зависимости
- librdkafka внутри компоненты обновлена до 2.15.0 (статическая линковка).
Исправлено
Ошибка "operation_timeout" is not supported for this operation в Admin-методах
- Затрагивала
ПолучитьНастройкиТопика,УстановитьНастройкиТопика,ПолучитьНастройкиБрокера,УстановитьНастройкиБрокера,ОписатьACL,УдалитьACL— вызов падал сразу на настройке опций, не доходя до запроса к брокеру. - Причина: librdkafka разрешает
operation_timeoutтолько дляCreateTopics,DeleteTopics,CreatePartitions,DeleteRecords,ListOffsets,ElectLeaders. - Теперь используется
request_timeout. Параметр «Таймаут» = таймаут запроса к брокеру, значения по умолчанию не изменились.
Конвертация строк 1С ↔ UTF-8
toUTF8String/toUTF16Stringконвертируют по явному диапазону(data, data + size). Буфер 1С не гарантирует нуль-терминатор — раньше возможен выход за границу буфера на длинных строках и обрезка на строках со встроенными нулями.
Текст ошибок librdkafka доходит до 1С (ПолучитьСообщениеОбОшибке)
- Асинхронные ошибки (SASL, недоступный брокер, SSL-handshake, сбой доставки) больше не теряются при пустом
КаталогЛогов— добавлен потокобезопасный слот последней асинхронной ошибки. CommitOffset,ConsumeBatch,ProduceBatch,ProduceBatchWithResult,ProduceWithRetry— вместо гологоЛожьпробрасывается реальная причина.GetConsumerLag,GetConsumerGroupOffsets— причина берётся изrd_kafka_last_error().PutAvroSchema,ConvertToAvroFormat,SetProtobufFieldFromJson,DecodeProtobufMessage— текст исключения больше не проглатывается.- Best-effort шаги (
GetPartitionWatermarks,GetTopicConsumerGroups) не выставляют ошибку при частичном результате;PARTITION_EOFвConsumeBatchне считается ошибкой.
Avro — упаковка time-millis
- Поле принимает полную ISO-строку
"YYYY-MM-DDTHH:MM:SS[.fff]", а не только"HH:MM:SS[.fff]"— из неё берётся временная часть. Устраняет ошибку при передаче типаДатаиз 1С.
Изменено
Валидация в УстановитьПозициюЧтения / УстановитьПозицииЧтения
- Методы возвращают
Ложьпри некорректных данных вместо безусловногоИстина; причина доступна черезПолучитьСообщениеОбОшибке(). - Проверяются: имя топика по правилам Kafka, номер партиции, тип аргумента, JSON и массив
metadata. - При доступном адресе брокеров дополнительно проверяется существование топика/партиции и что смещение не выше high watermark.
- Добавлен необязательный параметр
Брокер(по умолчанию""); адрес берётся из него, затем изbootstrap.servers/metadata.broker.list. Без адреса проверка существования топика пропускается — обратная совместимость, менять существующий код 1С не требуется. УстановитьПозицииЧтенияприменяет позиции атомарно: при ошибке хотя бы в одной записи не применяется ни одна.
Полный список изменений: CHANGELOG.md · сравнение с v1.9.1