diff --git a/internal/utils/ring_buffer.go b/internal/utils/ring_buffer.go
deleted file mode 100644
index cab385a..0000000
--- a/internal/utils/ring_buffer.go
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * 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.
- */
-
-package utils
-
-import (
-	"runtime"
-	"sync/atomic"
-	"time"
-)
-
-// 1.需要能够动态扩容
-// 2.缩容看情况
-// 3.read的时候需要block
-// 4.线程安全
-type RingNodesBuffer struct {
-	writePos uint64
-	readPos  uint64
-	mask     uint64
-
-	nodes nodes
-}
-
-type node struct {
-	position uint64
-	buf      []byte
-}
-
-type nodes []*node
-
-// roundUp takes a uint64 greater than 0 and rounds it up to the next
-// power of 2.
-func roundUp(v uint64) uint64 {
-	v--
-	v |= v >> 1
-	v |= v >> 2
-	v |= v >> 4
-	v |= v >> 8
-	v |= v >> 16
-	v |= v >> 32
-	v++
-	return v
-}
-
-func (rb *RingNodesBuffer) init(size uint64) {
-	size = roundUp(size)
-	rb.nodes = make(nodes, size)
-	for i := uint64(0); i < size; i++ {
-		rb.nodes[i] = &node{position: i}
-	}
-	rb.mask = size - 1 // so we don't have to do this with every put/get operation
-}
-
-func NewRingNodesBuffer(cap uint64) *RingNodesBuffer {
-	rb := &RingNodesBuffer{}
-	rb.init(cap)
-	//go rb.resize()
-	return rb
-}
-
-func (r *RingNodesBuffer) Write(b []byte) error {
-	var n *node
-	var dif uint64
-	pos := atomic.LoadUint64(&r.writePos)
-	i := 0
-L:
-	for {
-		// pos 16 seq 1.     0001 0000    00001111   0001 1111
-		n = r.nodes[pos&r.mask]
-		seq := atomic.LoadUint64(&n.position)
-		switch dif = seq - pos; {
-		case dif == 0:
-			if atomic.CompareAndSwapUint64(&r.writePos, pos, pos+1) {
-				break L
-			}
-		default:
-			pos = atomic.LoadUint64(&r.writePos)
-		}
-		if i == 10000 {
-			runtime.Gosched() // free up the cpu before the next iteration
-			i = 0
-		} else {
-			i++
-		}
-	}
-
-	n.buf = b
-	atomic.StoreUint64(&n.position, pos+1)
-	return nil
-}
-
-// 直接返回数据
-func (r *RingNodesBuffer) Read(timeout time.Duration) (data []byte, err error) {
-	var (
-		node  *node
-		pos   = atomic.LoadUint64(&r.readPos)
-		start time.Time
-		dif   uint64
-	)
-	if timeout > 0 {
-		start = time.Now()
-	}
-	i := 0
-L:
-	for {
-		node = r.nodes[pos&r.mask]
-		seq := atomic.LoadUint64(&node.position)
-		switch dif = seq - (pos + 1); {
-		case dif == 0:
-			if atomic.CompareAndSwapUint64(&r.readPos, pos, pos+1) {
-				break L
-			}
-		default:
-			pos = atomic.LoadUint64(&r.readPos)
-		}
-		if timeout > 0 && time.Since(start) >= timeout {
-			return
-		}
-		if i == 10000 {
-			runtime.Gosched() // free up the cpu before the next iteration
-			i = 0
-		} else {
-			i++
-		}
-	}
-	data = node.buf
-	atomic.StoreUint64(&node.position, pos+r.mask+1)
-	return
-}
-
-// 知道大小，传进去解析
-func (r *RingNodesBuffer) ReadBySize(data []byte, timeout time.Duration) (n int, err error) {
-	var (
-		node  *node
-		pos   = atomic.LoadUint64(&r.readPos)
-		start time.Time
-		dif   uint64
-	)
-	i := 0
-	if timeout > 0 {
-		start = time.Now()
-	}
-L:
-	for {
-		node = r.nodes[pos&r.mask]
-		seq := atomic.LoadUint64(&node.position)
-		switch dif = seq - (pos + 1); {
-		case dif == 0:
-			if atomic.CompareAndSwapUint64(&r.readPos, pos, pos+1) {
-				break L
-			}
-		default:
-			pos = atomic.LoadUint64(&r.readPos)
-		}
-		if timeout > 0 && time.Since(start) >= timeout {
-			return
-		}
-		if i == 10000 {
-			runtime.Gosched() // free up the cpu before the next iteration
-			i = 0
-		} else {
-			i++
-		}
-	}
-	n = copy(data, node.buf)
-	atomic.StoreUint64(&node.position, pos+r.mask+1)
-	return
-}
-
-func (r *RingNodesBuffer) Size() uint64 {
-	return atomic.LoadUint64(&r.writePos) - atomic.LoadUint64(&r.readPos)
-
-}
-
-// Cap returns the capacity of this ring buffer.
-func (rb *RingNodesBuffer) Cap() uint64 {
-	return uint64(len(rb.nodes))
-}
-
-func (r *RingNodesBuffer) Destroy() {
-
-}
-
-func (r *RingNodesBuffer) resize() {
-	// TODO
-}
diff --git a/internal/utils/ring_buffer_test.go b/internal/utils/ring_buffer_test.go
deleted file mode 100644
index 02a8cc0..0000000
--- a/internal/utils/ring_buffer_test.go
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.
- */
-
-package utils
-
-import (
-	"fmt"
-	"strconv"
-	"sync"
-	"testing"
-	"time"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestRingRead(t *testing.T) {
-	rb := NewRingNodesBuffer(5)
-	assert.Equal(t, uint64(8), rb.Cap())
-
-	err := rb.Write([]byte("hello"))
-	if !assert.Nil(t, err) {
-		return
-	}
-	data, err := rb.Read(1 * time.Second)
-	if !assert.Nil(t, err) {
-		return
-	}
-
-	assert.Equal(t, "hello", string(data))
-}
-
-func TestRingReadBySize(t *testing.T) {
-	rb := NewRingNodesBuffer(5)
-	assert.Equal(t, uint64(8), rb.Cap())
-
-	err := rb.Write([]byte("hello"))
-	if !assert.Nil(t, err) {
-		return
-	}
-	sink := make([]byte, 5)
-	n, err := rb.ReadBySize(sink, 1*time.Second)
-	if !assert.Nil(t, err) {
-		return
-	}
-
-	assert.Equal(t, 5, n)
-	assert.Equal(t, "hello", string(sink))
-}
-
-func BenchmarkRingReadBufferMPMC(b *testing.B) {
-	q := NewRingNodesBuffer(uint64(b.N * 100))
-	var wg sync.WaitGroup
-	wg.Add(100)
-	b.ResetTimer()
-	b.ReportAllocs()
-
-	for i := 0; i < 100; i++ {
-		go func() {
-			for i := 0; i < b.N; i++ {
-				q.Write([]byte(strconv.Itoa(i)))
-			}
-		}()
-	}
-
-	for i := 0; i < 100; i++ {
-		go func() {
-			for i := 0; i < b.N; i++ {
-				_ = len(strconv.Itoa(i))
-				var p []byte
-				p, _ = q.Read(1 * time.Second)
-				fmt.Sprintf("%v", p)
-
-			}
-			wg.Done()
-		}()
-	}
-
-	wg.Wait()
-}
-
-func BenchmarkRingBySizeBufferMPMC(b *testing.B) {
-	q := NewRingNodesBuffer(uint64(b.N * 100))
-	var wg sync.WaitGroup
-	wg.Add(100)
-	b.ResetTimer()
-	b.ReportAllocs()
-
-	for i := 0; i < 100; i++ {
-		go func() {
-			for i := 0; i < b.N; i++ {
-				q.Write([]byte(strconv.Itoa(i)))
-			}
-		}()
-	}
-
-	for i := 0; i < 100; i++ {
-		go func() {
-			for i := 0; i < b.N; i++ {
-				p := make([]byte, len(strconv.Itoa(i)))
-				q.ReadBySize(p, 1*time.Second)
-			}
-			wg.Done()
-		}()
-	}
-
-	wg.Wait()
-}
diff --git a/internal/utils/string.go b/internal/utils/string.go
index 964a92c..f347397 100644
--- a/internal/utils/string.go
+++ b/internal/utils/string.go
@@ -17,10 +17,6 @@
 
 package utils
 
-import (
-	"fmt"
-)
-
 // HashString hashes a string to a unique hashcode.
 func HashString(s string) int {
 	val := []byte(s)
@@ -32,11 +28,3 @@
 
 	return int(h)
 }
-
-func StrJoin(str, key string, value interface{}) string {
-	if key == "" || value == "" {
-		return str
-	}
-
-	return str + key + ": " + fmt.Sprint(value) + ", "
-}
diff --git a/internal/utils/string_test.go b/internal/utils/string_test.go
deleted file mode 100644
index 4e9e4ea..0000000
--- a/internal/utils/string_test.go
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-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.
-*/
-
-package utils
