PageSourceSearch

https://quickwit.io/assets/js/bd6bb03d.f6c2d967.js

js quickwit.io collected 2026-10-02 05:38:09 UTC 13,223 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkquickwit_io=self.webpackChunkquickwit_io||[]).push([[28903],{83857:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>g,frontMatter:()=>o,metadata:()=>u,toc:()=>d});var i=a(87462),n=(a(67294),a(3905)),r=a(22004),s=a.n(r);const o={slug:"quickwit-0.8",title:"Quickwit 0.8: Indexing and Search at Petabyte Scale",description:"Quickwit 0.8 brings indexing and search at an unprecedented scale, indexing at 1PB/day and searching through 50 PB is a reality.",authors:["fmassot","fulmicoton"],tags:["release","engineering"],image:"/img/blog/2024-03-19-quickwit-0.8.png"},l=void 0,u={permalink:"/blog/quickwit-0.8",source:"@site/blog/2024-03-19-quickwit-0.8.md",title:"Quickwit 0.8: Indexing and Search at Petabyte Scale",description:"Quickwit 0.8 brings indexing and search at an unprecedented scale, indexing at 1PB/day and searching through 50 PB is a reality.",date:"2024-03-19T00:00:00.000Z",formattedDate:"March 19, 2024",tags:[{label:"release",permalink:"/blog/tags/release"},{label:"engineering",permalink:"/blog/tags/engineering"}],readingTime:6.46,hasTruncateMarker:!1,authors:[{name:"Fran\xe7ois Massot",title:"Jack of all trades @Quickwit_inc",url:"https://github.com/fmassot",imageURL:"https://github.com/fmassot.png",key:"fmassot"},{name:"Paul Masurel",title:"Co-founder",url:"https://github.com/fulmicoton",imageURL:"https://github.com/fulmicoton.png",key:"fulmicoton"}],frontMatter:{slug:"quickwit-0.8",title:"Quickwit 0.8: Indexing and Search at Petabyte Scale",description:"Quickwit 0.8 brings indexing and search at an unprecedented scale, indexing at 1PB/day and searching through 50 PB is a reality.",authors:["fmassot","fulmicoton"],tags:["release","engineering"],image:"/img/blog/2024-03-19-quickwit-0.8.png"},prevItem:{title:"Grafana Plugin 0.4: QoL features ahead!",permalink:"/blog/quickwit-grafana-plugin-0.4"},nextItem:{title:"Building a log search service for under $7/month",permalink:"/blog/log-search-service-for-under-7-dollars"}},c={authorsImageUrls:[void 0,void 0]},d=[{value:"Achieving 1 PB/day in Indexing",id:"achieving-1-pbday-in-indexing",level:2},{value:"Searching the needle in petabytes of data",id:"searching-the-needle-in-petabytes-of-data",level:2},{value:"Reaching 300 search QPS",id:"reaching-300-search-qps",level:2},{value:"Overall improved search performance",id:"overall-improved-search-performance",level:2},{value:"Improving the search experience with Grafana",id:"improving-the-search-experience-with-grafana",level:2},{value:"Distributed ingest API and cooperative indexing",id:"distributed-ingest-api-and-cooperative-indexing",level:2},{value:"Coming next",id:"coming-next",level:2}],h={toc:d},p="wrapper";function g(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,i.Z)({},h,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Quickwit, the OSS Cloud Native Search Engine for Logs and Traces, now scales to petabytes of data!"))),(0,n.kt)("p",null,'We\'re excited to unveil Quickwit 0.8! Compared to previous versions, this version brings a rather short list of new "visible" features. Most of the improvements are in the invisible realms of scalability, efficiency, and performance.'),(0,n.kt)("p",null,"In the last few months, we have been working hard with Quickwit customers, partners, and open-source users on different use cases presenting challenges."),(0,n.kt)("p",null,"Together, these use cases have stretched Quickwit's capability in:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"number of nodes (up to 200)"),(0,n.kt)("li",{parentName:"ul"},"indexing speed (up to 1PB/day, or 13GiB/s)"),(0,n.kt)("li",{parentName:"ul"},"number of indexes (up to 3,000)"),(0,n.kt)("li",{parentName:"ul"},"and total amount of searchable data (several PBs of data).")),(0,n.kt)("p",null,"In the process, we uncovered a chain of unexpected bottlenecks and inefficiencies that we tackled one after the other."),(0,n.kt)("p",null,"Thanks to these efforts, Quickwit has reached a significant milestone: Quickwit is now running at petabyte scale!"),(0,n.kt)("p",null,"On the visible side, we have also greatly enhanced our ",(0,n.kt)("a",{parentName:"p",href:"https://grafana.com/grafana/plugins/quickwit-quickwit-d
1atasource/"},"Grafana plugin")," to deliver a seamless search experience within Grafana Explore and Dashboards. It packs features like autocomplete hints, a context query editor, and support for ad-hoc filters. The new plugins will require you to run Quickwit 0.8."),(0,n.kt)("p",null,"Last but not least, we're introducing our distributed ingest API in beta and looking for feedback from our users."),(0,n.kt)("p",null,"Let's unpack this before looking at what's coming next."),(0,n.kt)("h2",{id:"achieving-1-pbday-in-indexing"},"Achieving 1 PB/day in Indexing"),(0,n.kt)("p",null,"Scalability has always been a primary focus at Quickwit.\nUnfortunately, we do not have the data or the finances to play with petabytes. Our largest tests typically stop at 400MB/s of indexing throughput and 100TB of data overall. Quickwit handles this amount of data like a champ, so we were expecting Quickwit to behave properly at a petabyte scale, but we never had the chance to confirm that."),(0,n.kt)("p",null,"We stayed cautious and resisted the sirens of modern marketing. No premature claims. We would only call Quickwit petabyte-scale when someone has a Quickwit cluster in production with that data."),(0,n.kt)("p",null,"This is now done!"),(0,n.kt)("p",null,"Our largest user reached an indexing throughput of over 1 PB per day, equivalent to 13.4 GiB/s or 14 million docs/s, using 200 pods, each equipped with 6 vCPUs and 8GB of RAM."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Indexing 1PB/day",src:a(22694).Z,width:"2002",height:"676"})),(0,n.kt)("center",null,(0,n.kt)("i",null,"Screenshot shared by the user (please share yours!)")),(0,n.kt)("h2",{id:"searching-the-needle-in-petabytes-of-data"},"Searching the needle in petabytes of data"),(0,n.kt)("p",null,"It is one thing to index at 1 PB/day; it is another to search through the amassed data, which can quickly reach tens of petabytes. Once again, on paper, Quickwit is supposed to scale well, but we had never tested Quickwit above 100TB."),(0,n.kt)("p",null,"The largest Quickwit production search cluster has around 40 PB of uncompressed logs, over 10 indexes, 50 trillion (5x10\xb9\xb3) log entries, and an index of 7.5 PB stored on S3. User feedback has been very positive. With 30 beefy searcher pods, users are very happy with the search performance."),(0,n.kt)("h2",{id:"reaching-300-search-qps"},"Reaching 300 search QPS"),(0,n.kt)("p",null,"Most object storage providers (e.g. Amazon S3, Azure Blob storage, Google Storage...) have the same cost models :"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"$25 per TB x month,"),(0,n.kt)("li",{parentName:"ul"},"$0.005 per 1000 PUT requests."),(0,n.kt)("li",{parentName:"ul"},"$0.0004 per 1000 GET requests,")),(0,n.kt)("p",null,"The last two points are too often overlooked."),(0,n.kt)("p",null,"Let's have a look at what they mean for Quickwit.\nQuickwit will run 1 PUT request every time you add a split. With a ",(0,n.kt)("a",{parentName:"p",href:"https://quickwit.io/docs/configuration/index-config"},(0,n.kt)("inlineCode",{parentName:"a"},"commit_timeout_secs"))," set to 30s, you should expect less than ",(0,n.kt)("inlineCode",{parentName:"p"},"200,000 PUT")," requests per index per month (including merges). In other words, each index with a single pipeline will cost us around $1 per month.\nThis is usually not an issue manageable."),(0,n.kt)("p",null,"The cost associated with GET requests on the hand can become a problem.\nA single request will typically emit half a dozen GET requests per split.\nOne split is about 10 million documents."),(0,n.kt)("p",null,"For a reasonable index of 1 billion documents, a single query could induce 600 GET requests, which would cost $0.00024 per request."),(0,n.kt)("p",null,"Whether this is a lot depends on the number of queries per second (",(0,n.kt)("inlineCode",{parentName:"p"},"QPS"),") you need to address.\nFor an index of this size, Quickwit is cost-efficient if you have less than 0.1 QPS.\nAt this point, you will pay $60 just to run GET requests."),(0,n.kt)("p",null,"With introducting local disk caching for split files in Quickwit 0.7, we have unlocked the potential for higher QPS search use cases."),(0,n.kt)("p",null,"Several users reported impressive QPS on moderate datasets of 100 million / 1 billion records, and we also made our own benchmarks and reached 300 QPS with one instance. This opens up new possibilities across various domains, including financial services with large transaction datasets. We are eager to see new use cases on this front."),(0,n.kt)("h2",{id:"overall-improved-search-performance"},"Overall improved search performance"),(0,n.kt)("p",null,"Version 0.8 includes several extensive search optimizations affecting all types of queries.\nRegardless of your workload, you can expect a significant performance improvement by upgrading."),(0,n.kt)("p",null,"Here is a breakdown of our internal benchmark, comparing Quickwit 0.7 and Quickwit 0.8.\nWe hope green is your favorite color."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Quickwit 0.7 vs Quickwit 0.8",src:a(44537).Z,width:"1242",height:"3188"})),(0,n.kt)("h2",{id:"improving-the-search-experience-with-grafana"},"Improving the search experience with Grafana"),(0,n.kt)("p",null,"In Quickwit Grafana Plugin 0.4.0, we added several features to enhance the search experience. The main ones are:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Autocomplete hint on field names and values. This can be critical especially if you have unstructured data with field names that you don't know."),(0,n.kt)("li",{parentName:"ul"},"A new context query editor to explore before and after a pinned log line."),(0,n.kt)("li",{parentName:"ul"},"Adhoc Filters support: this is very handy when you want to filter all the panels of your dashboard easily.")),(0,n.kt)("p",null,"Quickwit Grafana plugin 0.4.x will require you to use Quickwit 0.8."),(0,n.kt)("p",null,"Find more details in the GitHub ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/quickwit-oss/quickwit-d
1atasource"},"repository"),"."),(0,n.kt)(s(),{playing:!0,controls:!0,url:"/img/blog/2024-03-06-editor-completions.webm",mdxType:"ReactPlayer"}),(0,n.kt)("h2",{id:"distributed-ingest-api-and-cooperative-indexing"},"Distributed ingest API and cooperative indexing"),(0,n.kt)("p",null,(0,n.kt)("img",{src:a(49664).Z,width:"1021",height:"759"})),(0,n.kt)("p",null,"One more thing... We have worked with several partners on a new distributed ingest API. It is now in beta, and we are looking for feedback from our users. This new ingest API, coupled with some work around distributed and local scheduling, is designed to efficiently handle a large number of indexes. So far, our largest use case runs 3,000 indexes on a cluster with 10 indexer nodes with 10 vCPUs each."),(0,n.kt)("p",null,"It is a game changer for multi-tenant use cases. We are already working with several PaaS to back their tenants' log search. If you want to test Quickwit for such a service, get in touch with us to build a partnership."),(0,n.kt)("p",null,"To get a taste of the feature, you can activate the distributed ingest API by setting the ",(0,n.kt)("inlineCode",{parentName:"p"},"QW_ENABLE_INGEST_V2")," environment variable to ",(0,n.kt)("inlineCode",{parentName:"p"},"true"),". To activate the cooperative indexing feature, you need to set ",(0,n.kt)("inlineCode",{parentName:"p"},"enable_cooperative_indexing")," to true in the Quickwit config file:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"indexer:\n  enable_cooperative_indexing: true\n")),(0,n.kt)("h2",{id:"coming-next"},"Coming next"),(0,n.kt)("p",null,"Shipping the distributed ingest API in the 0.9 is our top priority.\nWe have also started working on index configuration and schema update, as well as the support of OpenSearch Dashboards."),(0,n.kt)("p",null,"We are also cooking exciting partnerships with cool cloud providers to power their log services. We can't say more for now but we are very excited about it and we will keep you posted."),(0,n.kt)("p",null,"And if you are at Kubecon EU next week, we should meet there! We are sponsoring the great ",(0,n.kt)("a",{parentName:"p",href:"https://party.kubetrain.io/"},"Kubetrain party"),", drop me a message on ",(0,n.kt)("a",{parentName:"p",href:"https://twitter.com/francoismassot"},"Twitter")," or ",(0,n.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/fran%C3%A7ois-massot-473006b/"},"LinkedIn")," if you want to meet."),(0,n.kt)("p",null,"Happy searching!"))}g.isMDXComponent=!0},44537:(e,t,a)=>{a.d(t,{Z:()=>i});const i=a.p+"assets/images/2024-03-18-quickwit-bench-0.8-7e648c3d86bbd0c333df56328a18aba2.png"},49664:(e,t,a)=>{a.d(t,{Z:()=>i});const i=a.p+"assets/images/2024-03-19-one-more-thing-04799a36d96f262d82353840d47400fb.jpeg"},22694:(e,t,a)=>{a.d(t,{Z:()=>i});const i=a.p+"assets/images/qw-indexing-1pb-a-day-f191a9c0976a51f1b55ac8f2d3cbdf21.png"}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.