본관은 광주(廣州). 자는 계용(季容), 호는 초천(蕉泉). 김만근(金萬謹)의 증손으로, 할아버지는 김진륜(金鎭崙)이고, 아버지는 김무택(金茂澤)이며, 어머니는 윤득영(尹得永)의 딸이다.
1803년(순조 3) 증광 문과에 갑과로 급제하고 홍문록에 올랐다. 이듬해 교리(校理)로서 강화부안핵어사(江華府按覈御史)로 나아가 강화부 중군 이만원(李晩遠)의 불법을 다스렸다.
1805년 시독관으로 『강목(綱目)』을 강독하면서 임금에게 선악을 밝게 할 것을 아뢰었다. 이듬해 수찬(修撰)이 되었으며, 1807년 응교(應敎)가 되었다. 이듬해 공충우도(公忠右道: 현재 충청도의 일부)의 암행어사가 되어 관할 지역의 목사·군수 등이 백성들을 제대로 다스리지 않는다는 장계(狀啓)를 임금에게 올렸다.
1810년 통신사로 일본에 다녀왔으며, 그 공로로 1812년 가의대부(嘉義大夫)의 품계를 받았다. 1817년 강화부유수, 1819년 대사성을 거쳐 이조참판·대사간이 되었으며, 1822년 경상도관찰사가 되었다. 1824년 형조판서·좌부빈객(左副賓客)·의정부좌참찬 등을 거쳐, 이듬해 판의금부사, 1826년 예문관제학·이조판서 등을 역임하였다.