| --- |
| title: Known Issues and Limitations |
| layout: default |
| active_nav: docs |
| last_updated: 'Last updated 2024-10-28 17:39:22 -0700' |
| --- |
| <!-- |
| |
| Licensed 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. |
| --> |
| |
| |
| <div class="container"> |
| <div class="row"> |
| <div class="col-md-9"> |
| |
| <h1>Known Issues and Limitations</h1> |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| This document applies to Apache Kudu version 1.17.1. Please consult the |
| <a href="http://kudu.apache.org/releases/">documentation of the appropriate release</a> that’s applicable |
| to the version of the Kudu cluster. |
| </td> |
| </tr> |
| </table> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_schema"><a class="link" href="#_schema">Schema</a></h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="_primary_keys"><a class="link" href="#_primary_keys">Primary keys</a></h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>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.</p> |
| </li> |
| <li> |
| <p>The columns which make up the primary key must be listed first in the schema.</p> |
| </li> |
| <li> |
| <p>The primary key of a row may not be modified using the <code>UPDATE</code> 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.</p> |
| </li> |
| <li> |
| <p>Columns with <code>DOUBLE</code>, <code>FLOAT</code>, or <code>BOOL</code> types are not allowed as part of a |
| primary key definition. Additionally, all columns that are part of a primary |
| key definition must be <code>NOT NULL</code>.</p> |
| </li> |
| <li> |
| <p>Auto-generated primary keys are not supported.</p> |
| </li> |
| <li> |
| <p>Cells making up a composite primary key are limited to a total of 16KiB after the internal |
| composite-key encoding done by Kudu.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_columns"><a class="link" href="#_columns">Columns</a></h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>CHAR</code> and complex types like <code>ARRAY</code>, <code>MAP</code>, and <code>STRUCT</code> are not yet |
| supported.</p> |
| </li> |
| <li> |
| <p>Type, nullability and type attributes (i.e. precision and scale of <code>DECIMAL</code>, |
| length of <code>VARCHAR</code>) of existing columns cannot be changed by altering the |
| table.</p> |
| </li> |
| <li> |
| <p>Tables can have a maximum of 300 columns by default.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_tables"><a class="link" href="#_tables">Tables</a></h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Tables must have an odd number of replicas, with a maximum of 7.</p> |
| </li> |
| <li> |
| <p>The replication factor is set at table creation time and cannot be changed |
| later. As a workaround, create a new table with the same schema and |
| the desired replication factor and insert the contents of the old table |
| into the new one.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_cells_individual_values"><a class="link" href="#_cells_individual_values">Cells (individual values)</a></h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>By default, cells cannot be larger than 64KiB before encoding or compression.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_other_usage_limitations"><a class="link" href="#_other_usage_limitations">Other usage limitations</a></h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Secondary indexes are not supported.</p> |
| </li> |
| <li> |
| <p>Multi-row transactions are not yet supported.</p> |
| </li> |
| <li> |
| <p>Relational features, like foreign keys, are not supported.</p> |
| </li> |
| <li> |
| <p>Identifiers such as column and table names are restricted to be valid UTF-8 strings. |
| Additionally, a maximum length of 256 characters is enforced.</p> |
| </li> |
| <li> |
| <p>Dropping a column does not immediately reclaim space. Compaction must run first.</p> |
| </li> |
| <li> |
| <p>There is no way to run compaction manually, but dropping the table will reclaim the |
| space immediately.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_partitioning_limitations"><a class="link" href="#_partitioning_limitations">Partitioning Limitations</a></h2> |
| <div class="sectionbody"> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>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 |
| <a href="schema_design.html#schema_design">Schema Design</a> for more information.</p> |
| </li> |
| <li> |
| <p>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.</p> |
| </li> |
| <li> |
| <p>Tablets that lose a majority of replicas (such as 1 left out of 3) require manual |
| intervention to be repaired.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_cluster_management"><a class="link" href="#_cluster_management">Cluster management</a></h2> |
| <div class="sectionbody"> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Recommended maximum point-to-point latency within a Kudu cluster is 20 milliseconds.</p> |
| </li> |
| <li> |
| <p>Recommended minimum point-to-point bandwidth within a Kudu cluster is 10 Gbps.</p> |
| </li> |
| <li> |
| <p>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.</p> |
| </li> |
| <li> |
| <p>All masters must be started at the same time when the cluster is started for the very first time.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_server_management"><a class="link" href="#_server_management">Server management</a></h2> |
| <div class="sectionbody"> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>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 <a href="#_scale">Scale</a> limits.</p> |
| </li> |
| <li> |
| <p>Write ahead logs (WAL) can only be stored on one disk.</p> |
| </li> |
| <li> |
| <p>Tablet servers can’t change address/port.</p> |
| </li> |
| <li> |
| <p>Kudu has a requirement on having the server-side clock synchronized with NTP. |
| Kudu masters and tablet servers crash if detecting that the clock is out of |
| sync. For the clock synchronization, either synchronize the local clock |
| using an NTP server such as <code>ntpd</code> or <code>chronyd</code>, or use the built-in NTP |
| client for Kudu masters and tablet servers.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_scale"><a class="link" href="#_scale">Scale</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Kudu is known to run seamlessly across a wide array of environments and workloads |
| with minimal expertise and configuration at the following scale:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>3 master servers</p> |
| </li> |
| <li> |
| <p>100 tablet servers</p> |
| </li> |
| <li> |
| <p>8 TiB of stored data per tablet server, post-replication and post-compression.</p> |
| </li> |
| <li> |
| <p>1000 tablets per tablet server, post-replication.</p> |
| </li> |
| <li> |
| <p>60 tablets per table, per tablet server, at table-creation time.</p> |
| </li> |
| <li> |
| <p>10 GiB of stored data per tablet.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Staying within these limits will provide the most predictable and straightforward |
| Kudu experience.</p> |
| </div> |
| <div class="paragraph"> |
| <p>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:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>3 master servers</p> |
| </li> |
| <li> |
| <p>300+ tablet servers</p> |
| </li> |
| <li> |
| <p>10+ TiB of stored data per tablet server, post-replication and post-compression.</p> |
| </li> |
| <li> |
| <p>4000+ tablets per tablet server, post-replication.</p> |
| </li> |
| <li> |
| <p>50 GiB of stored data per tablet. Going beyond this can cause issues such a |
| reduced performance, compaction issues, and slow tablet startup times.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_security_limitations"><a class="link" href="#_security_limitations">Security Limitations</a></h2> |
| <div class="sectionbody"> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Row-level authorization is not available.</p> |
| </li> |
| <li> |
| <p>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 <code>dmcrypt</code>.</p> |
| </li> |
| <li> |
| <p>Server certificates generated by Kudu IPKI are incompatible with |
| <a href="https://www.bouncycastle.org/">bouncycastle</a> version 1.52 and earlier. See |
| <a href="https://issues.apache.org/jira/browse/KUDU-2145">KUDU-2145</a> for details.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_other_known_issues"><a class="link" href="#_other_known_issues">Other Known Issues</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>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.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>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.</p> |
| </li> |
| <li> |
| <p>NVM-based cache doesn’t work reliably on RH6/CentOS6 |
| (see <a href="https://issues.apache.org/jira/browse/KUDU-2978">KUDU-2978</a>).</p> |
| </li> |
| <li> |
| <p>When upgrading a Kudu cluster to 1.11.0 version with existing pre-1.11.0 |
| tables, the <code>live_row_count</code> and <code>on_disk_size</code> metrics might produce |
| inconsistent readings in some scenarios |
| (see <a href="https://issues.apache.org/jira/browse/KUDU-2986">KUDU-2986</a>).</p> |
| </li> |
| <li> |
| <p>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 <code>-DKUDU_LINK=dynamic</code> 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 |
| <a href="https://www.apache.org/legal/resolved.html#category-x">Category X</a>. This |
| issue has been addressed in 1.10.1 and 1.11.1 patch releases correspondingly |
| (see <a href="https://issues.apache.org/jira/browse/KUDU-2990">KUDU-2990</a>).</p> |
| </li> |
| <li> |
| <p>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 <a href="https://issues.apache.org/jira/browse/KUDU-3217">KUDU-3217</a>).</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="col-md-3"> |
| |
| <div id="toc" data-spy="affix" data-offset-top="70"> |
| <ul> |
| |
| <li> |
| |
| <a href="index.html">Introducing Kudu</a> |
| </li> |
| <li> |
| |
| <a href="release_notes.html">Kudu Release Notes</a> |
| </li> |
| <li> |
| |
| <a href="quickstart.html">Quickstart Guide</a> |
| </li> |
| <li> |
| |
| <a href="installation.html">Installation Guide</a> |
| </li> |
| <li> |
| |
| <a href="configuration.html">Configuring Kudu</a> |
| </li> |
| <li> |
| |
| <a href="hive_metastore.html">Using the Hive Metastore with Kudu</a> |
| </li> |
| <li> |
| |
| <a href="kudu_impala_integration.html">Using Impala with Kudu</a> |
| </li> |
| <li> |
| |
| <a href="administration.html">Administering Kudu</a> |
| </li> |
| <li> |
| |
| <a href="troubleshooting.html">Troubleshooting Kudu</a> |
| </li> |
| <li> |
| |
| <a href="developing.html">Developing Applications with Kudu</a> |
| </li> |
| <li> |
| |
| <a href="schema_design.html">Kudu Schema Design</a> |
| </li> |
| <li> |
| |
| <a href="scaling_guide.html">Kudu Scaling Guide</a> |
| </li> |
| <li> |
| |
| <a href="security.html">Kudu Security</a> |
| </li> |
| <li> |
| |
| <a href="transaction_semantics.html">Kudu Transaction Semantics</a> |
| </li> |
| <li> |
| |
| <a href="background_tasks.html">Background Maintenance Tasks</a> |
| </li> |
| <li> |
| |
| <a href="configuration_reference.html">Kudu Configuration Reference</a> |
| </li> |
| <li> |
| |
| <a href="command_line_tools_reference.html">Kudu Command Line Tools Reference</a> |
| </li> |
| <li> |
| |
| <a href="metrics_reference.html">Kudu Metrics Reference</a> |
| </li> |
| <li> |
| <span class="active-toc">Known Issues and Limitations</span> |
| <ul class="sectlevel1"> |
| <li><a href="#_schema">Schema</a> |
| <ul class="sectlevel2"> |
| <li><a href="#_primary_keys">Primary keys</a></li> |
| <li><a href="#_columns">Columns</a></li> |
| <li><a href="#_tables">Tables</a></li> |
| <li><a href="#_cells_individual_values">Cells (individual values)</a></li> |
| <li><a href="#_other_usage_limitations">Other usage limitations</a></li> |
| </ul> |
| </li> |
| <li><a href="#_partitioning_limitations">Partitioning Limitations</a></li> |
| <li><a href="#_cluster_management">Cluster management</a></li> |
| <li><a href="#_server_management">Server management</a></li> |
| <li><a href="#_scale">Scale</a></li> |
| <li><a href="#_security_limitations">Security Limitations</a></li> |
| <li><a href="#_other_known_issues">Other Known Issues</a></li> |
| </ul> |
| </li> |
| <li> |
| |
| <a href="contributing.html">Contributing to Kudu</a> |
| </li> |
| <li> |
| |
| <a href="export_control.html">Export Control Notice</a> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |