| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| [[known_issues_and_limitations]] |
| = Known Issues and Limitations |
| |
| :author: Kudu Team |
| :imagesdir: ./images |
| :icons: font |
| :toc: left |
| :toclevels: 3 |
| :doctype: book |
| :backend: html5 |
| :sectlinks: |
| :experimental: |
| |
| == Schema |
| |
| === Primary keys |
| |
| * The primary key may not be changed after the table is created. |
| You must drop and recreate a table to select a new primary key. |
| |
| * The columns which make up the primary key must be listed first in the schema. |
| |
| * The primary key of a row may not be modified using the `UPDATE` functionality. |
| To modify a row's primary key, the row must be deleted and re-inserted with |
| the modified key. Such a modification is non-atomic. |
| |
| * Columns with `DOUBLE`, `FLOAT`, or `BOOL` types are not allowed as part of a |
| primary key definition. Additionally, all columns that are part of a primary |
| key definition must be `NOT NULL`. |
| |
| * Auto-generated primary keys are not supported. |
| |
| * Cells making up a composite primary key are limited to a total of 16KB after the internal |
| composite-key encoding done by Kudu. |
| |
| === Columns |
| |
| * `CHAR` and complex types like `ARRAY`, `MAP`, and `STRUCT` are not yet |
| supported. |
| |
| * Type, nullability and type attributes (i.e. precision and scale of `DECIMAL`, |
| length of `VARCHAR`) of existing columns cannot be changed by altering the |
| table. |
| |
| * Tables can have a maximum of 300 columns by default. |
| |
| === Tables |
| |
| * Tables must have an odd number of replicas, with a maximum of 7. |
| |
| * Replication factor (set at table creation time) cannot be changed. |
| |
| === Cells (individual values) |
| |
| * Cells cannot be larger than 64KB before encoding or compression. |
| |
| === Other usage limitations |
| |
| * Secondary indexes are not supported. |
| |
| * Multi-row transactions are not yet supported. |
| |
| * Relational features, like foreign keys, are not supported. |
| |
| * Identifiers such as column and table names are restricted to be valid UTF-8 strings. |
| Additionally, a maximum length of 256 characters is enforced. |
| |
| * Dropping a column does not immediately reclaim space. Compaction must run first. |
| |
| * There is no way to run compaction manually, but dropping the table will reclaim the |
| space immediately. |
| |
| == Partitioning Limitations |
| |
| * Tables must be manually pre-split into tablets using simple or compound primary |
| keys. Automatic splitting is not yet possible. Range partitions may be added |
| or dropped after a table has been created. See |
| <<schema_design.adoc#schema_design,Schema Design>> for more information. |
| |
| * Data in existing tables cannot currently be automatically repartitioned. As a workaround, |
| create a new table with the new partitioning and insert the contents of the old |
| table. |
| |
| * Tablets that lose a majority of replicas (such as 1 left out of 3) require manual |
| intervention to be repaired. |
| |
| == Cluster management |
| |
| * Recommended maximum point-to-point latency within a Kudu cluster is 20 milliseconds. |
| |
| * Recommended minimum point-to-point bandwidth within a Kudu cluster is 10 Gbps. |
| |
| * If you intend to use the location awareness feature to place tablet servers in |
| different locations, it is recommended to measure the bandwidth and latency between servers |
| to ensure they fit within the above guidelines. |
| |
| * All masters must be started at the same time when the cluster is started for the very first time. |
| |
| == Server management |
| |
| * Production deployments should configure a least 4 GiB of memory for tablet servers, |
| and ideally more than 16 GiB when approaching the data and tablet <<Scale>> limits. |
| |
| * Write ahead logs (WAL) can only be stored on one disk. |
| |
| * Tablet servers can’t change address/port. |
| |
| * Kudu has a hard requirement on having up-to-date NTP. Kudu masters and tablet servers |
| will crash when out of sync. |
| |
| == Scale |
| |
| Kudu is known to run seamlessly across a wide array of environments and workloads |
| with minimal expertise and configuration at the following scale: |
| |
| * 3 master servers |
| |
| * 100 tablet servers |
| |
| * 8 TiB of stored data per tablet server, post-replication and post-compression. |
| |
| * 1000 tablets per tablet server, post-replication. |
| |
| * 60 tablets per table, per tablet server, at table-creation time. |
| |
| * 10 GiB of stored data per tablet. |
| |
| Staying within these limits will provide the most predictable and straightforward |
| Kudu experience. |
| |
| However, experienced users who run on modern hardware, use the latest |
| versions of Kudu, test and tune Kudu for their use case, and work closely with |
| the community, can achieve much higher scales comfortably. Below are some |
| anecdotal values that have been seen in real world production clusters: |
| |
| * 3 master servers |
| |
| * 300+ tablet servers |
| |
| * 10+ TiB of stored data per tablet server, post-replication and post-compression. |
| |
| * 4000+ tablets per tablet server, post-replication. |
| |
| * 50 GiB of stored data per tablet. Going beyond this can cause issues such a |
| reduced performance, compaction issues, and slow tablet startup times. |
| |
| == Security Limitations |
| |
| * Row-level authorization is not available. |
| |
| * Data encryption at rest is not directly built into Kudu. Encryption of |
| Kudu data at rest can be achieved through the use of local block device |
| encryption software such as `dmcrypt`. |
| |
| * Kudu server Kerberos principals must follow the pattern `kudu/<HOST>@DEFAULT.REALM`. |
| Configuring an alternate Kerberos principal is not supported. |
| |
| * Server certificates generated by Kudu IPKI are incompatible with |
| link:https://www.bouncycastle.org/[bouncycastle] version 1.52 and earlier. See |
| link:https://issues.apache.org/jira/browse/KUDU-2145[KUDU-2145] for details.' |
| |
| * The highest supported version of the TLS protocol is TLSv1.2 |
| |
| == Other Known Issues |
| |
| The following are known bugs and issues with the current release of Kudu. They will |
| be addressed in later releases. Note that this list is not exhaustive, and is meant |
| to communicate only the most important known issues. |
| |
| * If a tablet server has a very large number of tablets, it may take several minutes |
| to start up. It is recommended to limit the number of tablets per server to 1000 |
| or fewer. Consider this limitation when pre-splitting your tables. If you notice slow |
| start-up times, you can monitor the number of tablets per server in the web UI. |
| |
| * NVM-based cache doesn't work reliably on RH6/CentOS6 |
| (see link:https://issues.apache.org/jira/browse/KUDU-2978[KUDU-2978]). |
| |
| * When upgrading a Kudu cluster to 1.11.0 version with existing pre-1.11.0 |
| tables, the `live_row_count` and `on_disk_size` metrics might produce |
| inconsistent readings in some scenarios |
| (see link:https://issues.apache.org/jira/browse/KUDU-2986[KUDU-2986]). |
| |
| * In Kudu 1.10.0 and Kudu 1.11.0, the kudu-binary JAR (targeted for |
| containerized Kudu deployments using mini-cluster) contains libnuma dynamic |
| library. Also, if building Kudu binaries in release mode with default cmake |
| settings, the libnuma library is linked statically with the Kudu binaries |
| (add `-DKUDU_LINK=dynamic` when running cmake to avoid that). The library is |
| licensed under LGPL v.2.1, however the ASF thirdparty license policy |
| explicitly prohibits including such contents into releases: see |
| link:https://www.apache.org/legal/resolved.html#category-x[Category X]. This |
| issue has been addressed in 1.10.1 and 1.11.1 patch releases correspondingly |
| (see link:https://issues.apache.org/jira/browse/KUDU-2990[KUDU-2990]). |
| |
| * Due to a bug in SSSD PAC plugin of version prior to 1.16, a KRPC connection |
| negotiation may stuck and the whole process wouldn't be able to negotiate |
| any new connection for about 5 minutes in a secure Kudu cluster using SSSD. |
| If using SSSD in secure Kudu cluster deployments, make sure SSSD packages are |
| of version 1.16 or newer |
| (see link:https://issues.apache.org/jira/browse/KUDU-3217[KUDU-3217]). |